我有查询INSERTS显式值和SELECTd内容。我也在做基本的增量。
INSERT INTO `table` (`myID`, `myVal1`, `myVal2`) SELECT `myID` + 1, 'explValHere', 'otherValThere')
FROM `table` ORDER BY `myID` DESC LIMIT 0,1
我这样做是因为该表有多个id并且在特定列中递增。所以我不能像你首先说的那样使用自动递增和insert_id。
问题当然是插入不返回select,但可以吗?有没有办法运行这个插入查询并返回任何结果?
答案 0 :(得分:3)
由于您的查询有LIMIT 1
,因此您可以将“结果”存储在session/user-defined variable中。还有两个查询但是可以重入;每个连接都是自己的会话。
<?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)');
}
具有x = 0的tbl2中的“第一”记录是(myID = 3,x = 0)并且脚本打印4
。
除了那个和存储过程之外(据我所知),没有像SQLServer的OUTPUT或postgresql的RETURNING子句那样的MySQL。
答案 1 :(得分:0)
您可以(在事务中)首先读取值,然后执行insert语句。
答案 2 :(得分:0)
在正常插入后尝试这样做
INSERT INTO `table` (`myID`, `myVal1`, `myVal2`) values ('xxx','xxxx','xxxx');
然后使用
执行queryget last inser id$id=mysql_insert_id();
然后更新插入的行,如下所示
mysql_query("update table set myid=$id where id=$id");