php - 如何检查 mysql 搜索 JOIN 查询期间是否存在行?

标签 php mysql join group-by having

我有这个有效的 SQL 搜索查询,但只有当投票表中存在投票时它才有效。

mysql_query("SELECT m.Title, r.Subject, SUM(v.IsGood) AS Good, SUM(v.IsBad) AS Bad
    FROM Movies m
        JOIN Reviews r
            ON m.ID=r.MovieID
        JOIN Votes v
        ON r.ID=v.ReviewID
    WHERE (m.Title LIKE '%" . $search . "%' OR r.Subject LIKE '%" . $search . "%')
        GROUP BY m.Title, r.Subject
    ORDER BY SUM(v.IsGood) DESC, SUM(v.IsBad) ASC LIMIT 10")

所以我将其更改为下面的这样,以便无论是否有 0 票,它仍然应该显示。但它没有任何结果,谁能告诉我我做错了什么?

mysql_query("SELECT m.Title, r.Subject, COUNT(v.ReviewID) AS Rvotes, SUM(v.IsGood) AS Good, SUM(v.IsBad) AS Bad
    FROM Movies m
        JOIN Reviews r
            ON m.ID=r.MovieID
        JOIN Votes v
        ON r.ID=v.ReviewID
    WHERE (m.Title LIKE '%" . $search . "%' OR r.Subject LIKE '%" . $search . "%')
        GROUP BY m.Title, r.Subject, v.ReviewID
            HAVING Rvotes >= 0
    ORDER BY SUM(v.IsGood) DESC, SUM(v.IsBad) ASC LIMIT 10")

最佳答案

假设即使投票表中不存在投票,您也希望得到结果,LEFT JOIN 投票表。

mysql_query("SELECT m.Title, r.Subject, SUM(v.IsGood) AS Good, SUM(v.IsBad) AS Bad
    FROM Movies m
        JOIN Reviews r
            ON m.ID=r.MovieID
        LEFT JOIN Votes v
        ON r.ID=v.ReviewID
    WHERE (m.Title LIKE '%" . $search . "%' OR r.Subject LIKE '%" . $search . "%')
        GROUP BY m.Title, r.Subject
    ORDER BY SUM(v.IsGood) DESC, SUM(v.IsBad) ASC LIMIT 10")

注意:我已经修改了您的初始查询(不是第二个),因为您说它仍然没有提供您想要的内容。

关于php - 如何检查 mysql 搜索 JOIN 查询期间是否存在行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8916922/

相关文章:

sql - 使用 SQL 连接和子查询查询 R 中的两个表

php - Ajax 帖子创建 pdf

PHP 的 Java ArrayList 等效项

PHP MySQL 内连接问题

SQlite使用不同的 "on"语句两次连接同一个表

SQL-从左连接中删除重复项

php - Joomla float 表单字段

php - 使用 PayPal IPN 时的客户信息

mysql - Docker Wordpress 容器在约 30 秒后退出

mysql - SQL 计算间隔之间的时间差,包括来自单独表的时间