我有一个 MySQL 查询来获取最近有活动的项目。基本上,用户可以发布评论或将其添加到他们的愿望清单中,我想获取在过去 x 天内有新评论或被放置在某人的愿望清单中的所有项目。
查询有点像这样(稍微简化):
SELECT items.*, reaction.timestamp AS date FROM items
LEFT JOIN reactions ON reactions.item_id = items.id
WHERE reactions.timestamp > 1251806994
GROUP BY items.id
UNION
SELECT items.*, wishlists.timestamp AS date FROM items
LEFT JOIN wishlist ON wishlists.item_id = items.id
WHERE wishlists.timestamp > 1251806994
GROUP BY items.id
ORDER BY date DESC LIMIT 5
这是可行的,但是当一个项目同时被放置在某人的愿望清单中并发布了评论时,该项目会被退回两次。UNION
正常删除重复项,但由于date
两行之间的差异,两行都返回。我可以以某种方式告诉 MySQL 在删除重复行时忽略日期吗?
我也尝试做这样的事情:
SELECT items.*, IF(wishlists.id IS NOT NULL, wishlists.timestamp, reactions.timestamp) AS date FROM items
LEFT JOIN reactions ON reactions.item_id = items.id
LEFT JOIN wishlist ON wishlists.item_id = items.id
WHERE (wishlists.id IS NOT NULL AND wishlists.timestamp > 1251806994) OR
(reactions.id IS NOT NULL AND reactions.timestamp > 1251806994)
GROUP BY items.id
ORDER BY date DESC LIMIT 5
但由于某种原因,结果非常缓慢(大约花了半分钟)。