尝试让查询生效。我有一个电子邮件地址作为变量,需要更新此排名中高于匹配记录的所有行。查询:
UPDATE quiz_1_highscore
SET rate = rate - 1
WHERE rate >= ( SELECT rate FROM quiz_1_highscore WHERE email = ? )
然后我从表单提交中绑定电子邮件的参数,但查询不起作用。
我不想对数据库进行两次调用 - 一次调用该电子邮件行中的速率,另一次调用以执行更新。我可以在一个查询中完成所有操作吗?
修改
试图添加Caius评论:
UPDATE quiz_1_highscore AS T1 SET T1.rate = T1.rate - 1 WHERE T1.rate >= ( SELECT MAX(T2.rate) FROM quiz_1_highscore AS T2 WHERE T2.email = ? );
如果我在" mysql workbrench"中运行它,这项工作 - 但是在我的php文件中我得到了错误 -
ErrorSQLSTATE[HY000]: General error: 1093 Table 'T1' is specified twice, both as a target for 'UPDATE' and as a separate source for data
请帮助:\
答案 0 :(得分:0)
嵌套的SELECT语句是一个表,而不是一个值。使用
( SELECT MAX(rate) FROM quiz_1_highscore WHERE email = ? )
或其他一些聚合函数。
UPDATE quiz_1_highscore AS T1 SET T1.rate = T1.rate - 1 WHERE T1.rate >= ( SELECT MAX(T2.rate) FROM quiz_1_highscore AS T2 WHERE T2.email = ? );
答案 1 :(得分:0)
可能是子查询,您应该限制为添加一行:LIMIT 1