首页 > 解决方案 > 如何使用日期时间字段仅更新最旧的记录?

问题描述

好的,所以我有这个已经注册的人的等待列表,并且我有一个“下一个人”按钮,它使用 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 error 1241: Operand should contain 1 column(s) ”。

我做错了吗?

标签: phpsqlmysqli

解决方案


问题在于你的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)

查看:表被指定了两次,既作为“更新”的目标,又作为 mysql 中数据的单独源


推荐阅读