【问题标题】:How to check if rows exist during a mysql search JOIN query?如何在 mysql 搜索 JOIN 查询期间检查行是否存在?
【发布时间】:2012-01-18 20:27:12
【问题描述】:

我有这个有效的 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")

【问题讨论】:

    标签: php mysql join group-by having


    【解决方案1】:

    假设即使 votes 表中不存在投票,您也想要结果,LEFT JOIN votes 表。

    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")
    

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

    【讨论】:

    • 这行得通,但现在我只得到一个结果。我有一部电影和两条评论,如果我在搜索中输入电影的名称并且只有一条评论出现,而不是两者都显示。我希望所有比赛都出现。我需要改变什么?谢谢顺便说一句。
    • 我认为您的查询做得太多了。您可能需要备份和修改您的问题。
    • 嗯,这是我在此处发布的原始问题的扩展:stackoverflow.com/questions/8914475/… 在这里您将看到我的原始请求。
    • 你真的不应该重复问题。我建议你删除这个。
    • 我没有把它看作是重复的,更像是我试图从 A 到 C 并被困在 B... 无论如何,我尝试删除它但我不能这一点......关于为什么我只得到 1 个结果的任何想法?
    猜你喜欢
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 2011-05-06
    • 2021-01-15
    • 1970-01-01
    • 2014-04-10
    • 2018-06-10
    • 1970-01-01
    相关资源
    最近更新 更多