2013-07-09 66 views
0

這裏是我的查詢:如何獲取更新隻影響一個行(PHP/MySQL的)

$student_id = 34; 
$user_id = 1; 
$lesson_id = 25; 

$query = ("UPDATE lessons SET 
assigned='1', 
student_id='$student_id' 
WHERE user_id='$user_id' 
AND lesson_id='$lesson_id'") 

我試圖運行更新影響只有一行。我有這樣一個表:

_____________________________________ 
user_id|lesson_id|assigned|student_id 
_______|_________|________|__________ 
1  |16  |1  |12 
_______|_________|________|__________ 
1  |25  |0  |0 
_______|_________|________|__________ 
1  |25  |0  |0 
_______|_________|________|__________ 
1  |7  |1  |34 
_______|_________|________|__________ 
1  |13  |1  |12 
_______|_________|________|__________ 
1  |13  |0  |0 
_______|_________|________|__________ 

當我執行此更新時,我發現所有匹配的行都被更新。因此,如果我嘗試根據lesson_id 25進行更新,則兩行都會更改。我只需要一個來更改每個查詢。

我試着給查詢添加LIMIT 1,但它只允許我做一次。我又回到了表單,並再次將所有信息提交給了查詢,但它沒有再次執行。我認爲這很奇怪。

那麼,我錯過了什麼?

+0

我要指出,我有重複的原因是,通過每個實例的同時,循環迭代,以提供用於製作各分配降低可選列表。 –

+0

對於這兩條記錄來說,沒有什麼獨特的或獨特的,這使得無法對其中一個或另一個採取行動。爲什麼不添加一個名爲'attempt'的字段,每次給同一個學生分配相同的課程時都會增加? – DevlshOne

+1

我認爲你真的應該看看你的軟件,並作出一些更改... – Teejay

回答

1

嘗試使用:

$query = ("UPDATE lessons SET 
    assigned='1', 
    student_id='$student_id' 
    WHERE user_id='$user_id' 
    AND lesson_id='$lesson_id' 
    AND assigned ='0' LIMIT 1"); 
+0

這工作。太感謝了!! –

0

這個問題沒有多大意義。你有一個有兩個完全相同行的表,並且你的條件是更新這些行。那麼你想如何限制更新?

你應該添加一些獨特的列來識別記錄。現在你所能做的就是LIMIT語句。

你Where語句影響了這些行:

user_id|lesson_id|assigned|student_id 
_______|_________|________|__________ 
1  |25  |0  |0 
_______|_________|________|__________ 
1  |25  |0  |0 
_______|_________|________|__________ 

你真的應該考慮重新設計你的數據庫。但是,如果不可能,請使用WHERE條件中的分配字段。 WHERE assigned <> 1