选择在某些约束下其他表中找不到ID的行

时间:2010-08-03 19:39:22

标签: sql mysql

我正在解决的实际问题是显示最近用户最近没有查看过的最近更新的项目列表。

我正在尝试返回一个包含未包含在给定用户的项目视图表中的项目的表格(假设这个用户编号为1)。我想出来了:

SELECT * FROM items i
WHERE i.updated_at > date_sub(curdate(), interval 10 day)
AND i.id NOT IN (
  SELECT item_id FROM item_views v
  WHERE i.created_at > date_sub(curdate(), interval 10 day)
  AND i.user_id = 1
)

这似乎工作正常(它甚至是最好的方法吗?)。但是,在考虑8天前查看并在3天前更新的项目时,我遇到了问题。这样的项目显然是新的,但它不会出现在此查询下。我该如何处理添加此限制?

2 个答案:

答案 0 :(得分:1)

如果您的视图中有updated_at列,则可以随时添加一行以进行检查,以确保更新日期不在您的时间轴内。更好的是,您可以检查以确保更新日期大于上次查看日期。

答案 1 :(得分:0)

这不是最佳解决方案。但快速的anwser用OR代替AND应该可以工作。