sql >> Database teknologi >  >> RDS >> Mysql

MySQL:Få et returresultat fra et INSERT SELECT

Da din forespørgsel har en LIMIT 1 du kan gemme "resultatet" i en session/bruger- defineret variabel . Stadig to forespørgsler, men tilbagevendende; hver forbindelse er sin egen session.

<?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)');
}

den "første" post i tbl2 med x=0 er (myID=3,x=0), og scriptet udskriver 4 .

Bortset fra det og lagrede procedurer et al er der (såvidt jeg ved) intet som SQLServers OUTPUT eller postgresqls RETURNERING klausul for MySQL.



  1. mysql opdateringsforespørgsel med underforespørgsel

  2. Oracle strengaggregering

  3. Hvornår skal dato eller tidsstempel bruges

  4. mysql2 gem installation mislykkes