如何获取UPDATE仅影响一行(PHP / MySQL)

时间:2013-07-09 13:07:34

标签: 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'")

我试图运行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添加到查询中,但它只允许我执行一次。我回到表单并再次将所有信息提交给查询,但它没有再次执行。我觉得这很奇怪。

那么,我错过了什么?

2 个答案:

答案 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