繁体   English   中英

MySQL UPDATE查询与SubQuery

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM