2016-04-24 87 views
-1

我的MySQL数据库是这样的:选择在UPDATE在同一个表

short -- idnumber--position

abc.......8765...........4

def........7453...........1

abc.......7398...........5

def........7542...........2

我有IDNumber中,想用相同的“短”为IDNumber中更新所有。更新应该是位置1。

我有IDNumber中: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']; 
}; 
?> 
+2

您运行的是'update'。没什么可抓取的.. – chris85

回答

0

试试这个。你可以给一个开始的ID。

UPDATE idtabelle 
SET position = position -1 
WHERE idnumber = 8765 
AND position > 2 
ORDER BY position ASC; 
0

您试图从不返回行的UPDATE语句中获取行结果。 (你的SELECT查询都返回它的行仅对更新查询 - 更新结果返回给你的唯一的事情)

什么,你应该做的是一样的东西:

... 
$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来更新之后的行。

0

如果我尝试在sqlfiddle.com上运行您的查询,我收到错误:“您无法在FROM子句中更新目标表'idtabelle'”。

但是你可以用你的子查询到另一个子查询(派生表):

UPDATE idtabelle 
SET position = position-1 
WHERE short IN (SELECT short FROM (
    SELECT short 
    FROM idtabelle 
    WHERE idnumber = :idV 
) temp); 

http://sqlfiddle.com/#!9/7d88a/1