我创建了一个选择查询,该查询向我显示了需要更新的正确行:
SELECT `subject`,`ticket_messages`.`ticket_ID` as t,
(SELECT `date` from `ticket_messages` where `ticket_ID`=t ORDER BY `date` DESC LIMIT 1) as d
from `ticket_messages`
LEFT JOIN `tickets` on `ticket_messages`.`ticket_ID`=`tickets`.`ticket_ID`
GROUP BY t
HAVING d<date_sub(curdate(), interval 5 day)
ORDER BY t
我将使用php,但首先要在phpmyadmin中解决查询问题。正确地执行以上查询,并为我提供了正确的行。基本上,它列出了5天以上的所有内容。不用担心我在选择主题和日期,那只是这样,我知道我得到的是正确的行。
问题是如何将其转换为更新查询?我花了几个小时才能完成这项工作。
我将要更新的是:
UPDATE `tickets` SET `status`=?
基本上,它将在ticket_messages中查找并找到最后一条消息。这是我的选择查询执行的操作,如果最后日期超过5天,它将在我的“票证”表中更新状态。这些表是引用链接的。
所以我需要一个带有子查询的Update,并且我不知道要这样做。
好,再增加一点。我试过了
UPDATE `tickets` SET `status`=8
WHERE
(
SELECT `subject`,`ticket_messages`.`ticket_ID` as t,
(SELECT `date` from `ticket_messages` where `ticket_ID`=t ORDER BY `date` DESC LIMIT 1) as d
from `ticket_messages`
LEFT JOIN `tickets` on `ticket_messages`.`ticket_ID`=`tickets`.`ticket_ID`
GROUP BY t
HAVING d<date_sub(curdate(), interval 5 day)
ORDER BY t)!=null
我认为where子句如果不等于null会起作用。
您的第一个查询,我不喜欢,因为我真的不明白您为什么使用subSelect,为什么使用group by。你想约会什么?
无论如何,您说只想要5天以上的车票,
SELECT tm.ticket_ID, MAX(`date`) as d
FROM `ticket_messages` as tm
GROUP BY tm.ticket_ID
HAVING d < date_sub(curdate(), interval 5 day)
这就是您首先要查询的内容。告诉我您是否获得相同的ID。
现在进行更新,您只需加入:
UPDATE `tickets`
INNER JOIN
(SELECT tm.ticket_ID, MAX(`date`) as d
FROM `ticket_messages` as tm
GROUP BY tm.ticket_ID
HAVING d < date_sub(curdate(), interval 5 day)) AS T
ON T.ticket_ID = `tickets`.ticket_ID
SET`status`=?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句