1

我有查询 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。

问题当然是插入不返回选择,但可以吗?有没有办法运行这个插入查询并返回任何结果?

4

3 回答 3

2

由于您的查询有,LIMIT 1您可以将“结果”存储在会话/用户定义的变量中。仍然有两个查询但可重入;每个连接都是它自己的会话。

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

tbl2 中 x=0 的“第一条”记录是 (myID=3,x=0) 并且脚本打印4.

除此之外和存储过程等(据我所知)没有什么像 SQLServer 的OUTPUT或 postgresql 的 MySQL 的RETURNING子句。

于 2012-10-25T11:36:42.190 回答
0

您可以(在事务中)首先读取值,然后执行插入语句。

于 2012-10-25T11:04:15.270 回答
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");
于 2012-10-25T11:09:34.010 回答