2011-10-10 21 views
0

,我有以下MySQL表數據 其中主鍵是(ID,SEQ)PHP + mysqlupdate

id name seq 
------------ 
1 a  1 
1 b  2 
1 c  3 
1 d  4 

現在我要做的就是刪除第1行,並減少在剩餘行SEQ值由1

我使用的是PHP PDO。我已經刪除了第一行,然後取出在$ result中剩餘的行,然後做下面

while($row1 = mysql_fetch_array($result,MYSQL_ASSOC)) 

$dbh->exec("update tablename set seq = seq-1 where id = $row1['id'] and seq > 1 "); 

我收到以下錯誤

SQLSTATE [23000]:完整性約束違規:1062重複條目關鍵'PRIMARY'

任何人都可以幫助我嗎?

+0

在由'seq'排序'$ result'你行? – Dani

+0

我只是選擇*從...,並把它放在結果 – user755043

+0

嘗試這個'select * from tablename order by seq asc' – Dani

回答

0

我不知道如果我理解你的問題所在,但如果這while語句:

while($row1 = mysql_fetch_array($result,MYSQL_ASSOC)) 

遍歷行「B」,「C」和「d」,問題是,隨着第一個循環,b,c和d的「seq」的值是1,2,3,然後在第二個循環中,b,c和d的sec的值將是1,1和1。也許這是問題。 我認爲你應該做的是: 1)刪除第一行 2)執行查詢只有一次

$dbh->exec("update tablename set seq = seq-1 where id = $row1['id'] and seq > 1 "); 

你可以採取的ID從刪除的行。此外,爲了確保一切正常,您應該在您的查詢中添加一條語句聲明:

$dbh->exec("UPDATE tablename SET seq = seq-1 WHERE id = $row1['id'] AND seq > 1 ORDER BY seq ASC "); 

我希望它有幫助!

+0

thnx的答覆。仍然我得到相同的錯誤 – user755043

+0

對不起我的壞。有效。日Thnx。 – user755043

0

因爲您將主鍵(id,seq)放在一起。主鍵的基本屬性是...它將是唯一的,而不是NULL。所以必須違反id和seq的組合的唯一性,這就是爲什麼你得到低於錯誤的原因。

REFERENCE