如何使UPDATE只影响一行(PHP/MMySQL)


How to Get UPDATE to only affect one row (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添加到查询中,但它只允许我执行一次。我回到表单,再次将所有信息提交给查询,但第二次没有执行。我觉得这很奇怪。

那么,我错过了什么?

尝试使用:

$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");

这个问题没有多大意义。您有一个表,它有两个完全相同的行,您的条件是更新这些行。那么,您希望如何限制更新?

您应该添加一些唯一的列来标识记录。现在你们所能做的就是LIMIT语句。

您的Where语句会影响这些行:

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

你真的应该考虑重新设计你的数据库。但是,如果不可能,则使用WHERE条件中的指定字段。WHERE assigned <> 1