sql >> Database >  >> RDS >> Mysql

MySQL:krijg een resultaat van een INSERT SELECT

Aangezien uw zoekopdracht een LIMIT 1 . heeft je zou het "resultaat" kunnen opslaan in een session/user- gedefinieerde variabele . Nog steeds twee queries maar re-entry; elke verbinding is zijn eigen sessie.

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
setup($pdo);

$query = "
    INSERT INTO tbl1 (myID, myVal1, myVal2)
    SELECT @foo:=myID+1, 'val1', 'val2' FROM tbl2 WHERE x=0 LIMIT 1
";
$pdo->exec($query);
foreach( $pdo->query('SELECT @foo as foo') as $row ) {
    echo $row['foo'];
}


function setup($pdo) {
    $pdo->exec('CREATE TEMPORARY TABLE tbl1 (myID int, myVal1 varchar(16), myVal2 varchar(16))');
    $pdo->exec('CREATE TEMPORARY TABLE tbl2 (myID int, x int)');
    $pdo->exec('INSERT INTO tbl2 (myID, x) VALUES (1,1),(2,1),(3,0),(4,0),(5,1)');
}

het "eerste" record in tbl2 met x=0 is (myID=3,x=0) en het script drukt 4 af .

Anders dan dat en opgeslagen procedures et al, gaat er (voor zover ik weet) niets boven SQLServer's UITGANG of postgresql's TERUGKEER clausule voor MySQL.



  1. Utf8mb4 gebruiken in MySQL

  2. Wanneer moet ik MySQLi gebruiken in plaats van MySQL?

  3. MySQL LIKE-beperking

  4. Verbinding maken met host PostgreSQL vanaf een zwervende virtualbox-machine