mysql - 如何修复此 LEFT JOIN 查询?

标签 mysql

我有三个表:

  • 产品(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/

相关文章:

php - 在 LIKE 查询中查找 % 字符

mysql - 即使在 SELECT First 之后,双重请求也会重复数据库条目

java - JasperReports 中的日期区域设置

MySQL INSERT INTO 使用 WHERE 子句

python - 连接到动态数据库参数 sqlalchemy

mysql - 创建表时出现 MARIADB 错误 1064 (42000)

Mysql 查询在 phpmyadmin 中显示错误

asp.net - 如何使用 ASP.NET 使用 Excel 中的数据更新 MYSQL 数据库?

mysql - 缓慢的 mysql 查询,复制到 tmp 表,使用文件排序

While 语句中的 If else 语句中的 PHP 多个变量