我有三个表:
- 产品(product_id,标题)
- 评论(comment_id、product_id、user_id、comment、post_date)
- 书签(user_id、product_id、read_date)
对于 products 表中的每个 product_id,我希望检索具有相同 product_id 的评论数,其 post_date 值大于书签表中共享此 product_id 且 user_id= 的行的 read_date 值22.
如果书签表中不存在这样的一行,我想检索该 product_id 的评论总数,而不考虑 read_date。
目前为止
SELECT p.product_id, COUNT( c.comment_id ) comment_count
FROM products p
LEFT JOIN bookmarks b, comments c ON b.product_id = c.product_id
AND b.user_id =22
AND (
c.post_date > b.read_date
)
AND p.product_id = c.product_id
GROUP BY c.product_id
ORDER BY comment_count DESC
这没有给我预期的结果。我怎样才能修改它以使其执行我想要的操作?
最佳答案
它对你有用吗?
SELECT p.product_id,
COUNT(CASE
WHEN b.read_date IS NOT NULL AND c.post_date >b.read_date THEN c.comment_id
WHEN b.read_date IS NULL THEN c.comment_id
ELSE NULL //optional, CASE has default ELSE NULL
END) as comment_count
FROM products p
LEFT JOIN bookmarks b ON (b.product_id = p.product_id AND b.user_id=22)
LEFT JOIN comments c ON (p.product_id = c.product_id)
GROUP BY p.product_id
ORDER BY comment_count DESC
更新
GROUP BY c.product_id
更改为 GROUP BY p.product_id
关于mysql - 如何修复此 LEFT JOIN 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8592948/