我有一個MySQL查詢來獲取最近有活動的項目。基本上,用戶可以發佈評論或將其添加到他們的願望清單中,並且我想要獲得所有在最近x天內都有新評論或者被放置在某人的願望清單上的項目。在使用UNION時擺脫MySQL查詢中的重複結果
查詢去有點像這樣(略簡體):
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
但是,這竟然是出於某種原因出奇的慢(花了大約半分鐘)。
你需要顯示日期嗎? – Buggabill 2009-10-01 12:48:26
不,日期僅用於排序。 – Aistina 2009-10-01 12:53:20