这是我的疑问:
$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'")
我试图运行UPDATE只影响一行。我有一张这样的桌子:
_____________________________________
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
_______|_________|________|__________
当我执行此UPDATE时,我发现所有匹配的行都已更新。因此,如果我尝试基于lesson_id 25进行更新,则两行会发生变化。我只需要一个更改每个查询。
我尝试将LIMIT 1添加到查询中,但它只允许我执行一次。我回到表单并再次将所有信息提交给查询,但它没有再次执行。我觉得这很奇怪。
那么,我错过了什么?
答案 0 :(得分: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");
答案 1 :(得分:0)
这个问题没有多大意义。你有一个表有两个完全相同的行,你的条件是更新这些行。那么你想如何限制更新?
您应该添加一些唯一列来标识记录。现在你所能做的就是LIMIT声明。
您的Where语句会影响这些行:
user_id|lesson_id|assigned|student_id
_______|_________|________|__________
1 |25 |0 |0
_______|_________|________|__________
1 |25 |0 |0
_______|_________|________|__________
您应该考虑重新设计数据库。但是,如果不可能,则在 WHERE 条件中使用已分配的字段。 WHERE assigned <> 1