查询以清除某些记录

时间:2015-07-27 18:25:34

标签: php mysql

好的,所以表1包含一个具有相关ID号的用户列表。它还包含一个“非活动”字段(我将在下面引用它)。表2显示了已填写的报告列表,其中记录了用户的报告以及该唯一ID。

我想要做的是选择超过30天的报告。如果用户尚未在该时间范围内填写报告,我想将表1中的状态设置为“无效”。

我面临的最大挑战是,有许多报告都返回了相同的ID号。我不知道如何将这些变成数组或任何没有重复的东西。

我希望这很清楚。

1 个答案:

答案 0 :(得分:0)

您似乎正在为没有少于30天的报告的用户查找user_id值列表。您希望在UPDATE查询中使用该列表来设置这些用户inactive

清单:

       SELECT u.user_id
         FROM user u
    LEFT JOIN report r  ON r.user_id = u.user_id
                       AND r.reportdate < CURDATE() - INTERVAL 30 DAY
        WHERE r.user_id IS NULL

这是用于查找与左侧JOIN标准不匹配的右侧行的LEFT JOIN ... IS NULL模式。

一旦你得到了解决方案(嘿!检查它并确保它是对的!)你可以在UPDATE查询中使用它:

 UPDATE user 
    SET status='inactive'
  WHERE user_id IN (
       SELECT u.user_id
         FROM user u
    LEFT JOIN report r  ON r.user_id = u.user_id
                       AND r.reportdate < CURDATE() - INTERVAL 30 DAY
        WHERE r.user_id IS NULL
  )