好吧,所以我有这个等待名单中已经注册的人,并且我有一个“ NEXT PERSON”按钮,该按钮使用AJAX调用PHP脚本,该脚本应该从等待名单中删除最早的记录(换句话说,下一个人)。 。
好吧,我正在尝试构建此查询,该查询仅更新表中尚未参加的最早的人。这是我的查询:
UPDATE queue
SET ATTENDED='1'
WHERE VISIT_DATE = (SELECT * WHERE ATTENDED='0' ORDER BY VISIT_DATE ASC LIMIT 1)
这是我的桌子(队列):
ID int(11)
GUEST_NAME varchar(50)
VISIT_DATE datetime(6)
ATTENDED int(11)
问题是我遇到错误“ MySQL错误1241:操作数应包含1列”。
我做错了吗?
答案 0 :(得分:1)
问题出在您的WHERE
子句中。您正在将VISIT_DATE
与表的整个行进行比较。
正如@Hudson指出的那样,您还缺少从中获得最早日期的表格。因此,您的查询应如下所示:
UPDATE
queue AS UpdateTbl
SET
UpdateTbl.ATTENDED='1'
WHERE
UpdateTbl.VISIT_DATE = (SELECT
ReadTbl.VISIT_DATE
FROM
(select * from queue) AS ReadTbl
WHERE
ReadTbl.ATTENDED='0'
ORDER BY
ReadTbl.VISIT_DATE ASC
LIMIT 1)
查看:Table is specified twice, both as a target for 'UPDATE' and as a separate source for data in mysql
答案 1 :(得分:0)
首先:是否可以有多个具有相同日期的记录?然后,您必须使用您的ID:
UPDATE queue
SET attended = 1
WHERE id =
(
SELECT id
WHERE attended = 0
FROM (SELECT * FROM queue) q
ORDER BY visit_date, id
LIMIT 1
);
否则,这只是最短的日期:
UPDATE queue
SET attended = 1
WHERE visit_date =
(
SELECT MIN(visit_date)
FROM (SELECT * FROM queue) q
WHERE attended = 0
);
在两种情况下,我们都必须选择FROM (SELECT * FROM queue) q
而不是单纯的FROM queue
,因为MySQL出于未知原因禁止直接查询更新的表。