mysql - 跳过计算用户自己的评论

标签 mysql join

我认为这将是一个简单的查询,但它比我预期的要难。

我有一个简单的论坛应用程序,用户可以在其中打开一个故事,然后其他用户可以发表评论。

两个表是

故事

id
user_id
subject
approved

评论

id
user_id
story_id
approved

基本上,我想通过不计算原始发布者自己的评论来查询未回答的故事。即使其他人发布了新评论,如果评论尚未获得批准,也不应将其视为已回答的故事。

select * from stories left join comments on stories.id = comments.story_id
having count(comments.id) = 0 or ( count(comments.id) > 0 and comments.user_id = stories.user_id )

它在没有'approved'标志的情况下工作正常,但是当我将'approved'添加到where/having子句时我无法让它工作。

我做错了什么?

最佳答案

我会将 count 移动到一个子查询中,并放入一个 in 条件来检查回答了什么,没有回答什么:

SELECT s.* 
FROM   stories s
WHERE  s.id NOT IN (SELECT   story_id
                    FROM     comments c
                    WHERE    approved = true AND 
                             c.user_id != s.user_id 
                    GROUP BY story_id
                    HAVING   COUNT(*) > 0)

关于mysql - 跳过计算用户自己的评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26646261/

相关文章:

mysql - 为 WHERE 上的子查询取别名

mysql - 链接 MySQL 表中的行

python-3.x - 如果 Pandas 数据框的第一列没有匹配项,则加入第二列

MySQL,多个 JOINS,一个计数。无法自行解决

php - 将 2 个单独的数据库查询合并到一个 foreach 循环中或将查询合并为一个

独立 JAVA 应用程序中的 MySql 池数据源(无 J2EE 容器、无 JNDI、无 TOMCAT 等)

PHP Mysql - 删除按钮不断删除最新行

PHP MYSQL 尝试在多个主机名下连接

php - HTML 登录表单连接到数据库

sql - 获取连接的逆?