![](/img/trans.png)
[英]MYSQL : SET value in an UPDATE query when all conditions of subquery are satisfied
[英]MySQL UPDATE query with SubQuery
我创建了一个选择查询,该查询向我显示了需要更新的正确行:
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`=?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.