我的MYSQL数据库如下所示:
short - idnumber - position
ABC ....... 8765 ........... 4
DEF ........ 7453 ........... 1
ABC ....... 7398 ........... 5
DEF ........ 7542 ........... 2
我有一个idnumber,想要使用与idnumber相同的'short'更新所有内容。更新应该是位置-1。
我有一个数字:8765它的位置应该是3,而id 7398的位置应该是4
我该如何正确地做到这一点?我的代码不工作,我没有回音
<?php
$pdo = new PDO('mysql:host=localhost;dbname=testdb1', 'root', '');
$idV = $_GET['id'];
$statement = $pdo->prepare("UPDATE idtabelle SET position = position-1 WHERE short IN
(SELECT short FROM idtabelle WHERE idnumber = :idV)");
$statement->bindParam(':idV', $idV);
$statement->execute();
while ($row = $statement->fetch(PDO::FETCH_ASSOC))
{
echo $row['short'];
};
?>
答案 0 :(得分:0)
试试这个。你可以给一个开始id。
UPDATE idtabelle
SET position = position -1
WHERE idnumber = 8765
AND position > 2
ORDER BY position ASC;
答案 1 :(得分:0)
您正在尝试从不返回行的UPDATE语句中获取行结果。 (您的SELECT子查询仅将其行返回到UPDATE查询 - UPDATE结果是唯一返回给您的结果。)
你应该做的是:
...
$statement->bindParam(':idV', $idV);
if ($statement->execute())
echo $statement->rowCount() . " rows updated";
else
echo "Update failed with error: " .print_r($statement->errorInfo(), TRUE);
...
如果除了更新之外还需要获取“short”的值,那么你应该把它作为两个查询来代替 - 一个SELECT来获取“short”,一个UPDATE来更新后面的行。
答案 2 :(得分:0)
如果我尝试在sqlfiddle.com上运行您的查询,我会收到错误:&#34;您无法指定目标表&#39; idtabelle&#39;用于FROM子句中的更新&#34;。
但是您可以将子查询包装到另一个子查询(派生表)中:
UPDATE idtabelle
SET position = position-1
WHERE short IN (SELECT short FROM (
SELECT short
FROM idtabelle
WHERE idnumber = :idV
) temp);