使用SubQuery进行MySQL UPDATE查询

时间:2016-10-03 14:03:38

标签: php mysql

我创建了一个选择查询,向我显示需要更新的正确行:

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 `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

如果它不等于null,我认为where子句会起作用。

1 个答案:

答案 0 :(得分:1)

你的第一个查询,我不喜欢它,因为我真的不明白为什么你使用subSelect,为什么你使用group by。你想要什么约会?

无论如何你说你只想要超过5天的门票,

fill=0

这就是你第一次查询的全部内容。如果你得到相同的身份证明,请告诉我。

现在进行更新,你只需要加入:

library(data.table)
dcast(setDT(data), score~members, value.var= 'country', fun.aggregate = uniqueN, fill = 0)   
#   score 1 2 3 4 5 6 7
#1:     0 0 1 0 0 0 1 2
#2:     1 1 1 2 2 1 3 2
#3:     2 1 0 1 2 0 1 1