2016-04-24 37 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