【问题标题】:How to use LIKE for mysql search with JOIN and ORDER BY the count of most rows/votes in the vote table?如何通过 JOIN 和 ORDER BY 对投票表中大多数行/投票的计数使用 LIKE 进行 mysql 搜索?
【发布时间】:2012-02-13 10:17:10
【问题描述】:

我需要在搜索、电影、评论和投票中使用三个表。我想对 Movie.Title 和 Review.Subject 使用 LIKE 函数,并按每场比赛的最高票数对它们进行排序。

Votes 表中有一个 ReviewID、UserID、IsGood。每次用户投票时,都会插入 MovieID、UserID,IsGood 为 1 或 0,1 表示好,0 表示坏。

所以一条评论可能有0好票和坏票,或者5好3坏等。我想按以下顺序显示结果:

评论 1 - 10 好 / 3 坏

评论 2 - 4Good / 3Bad

评论 3 - 0Good / 0Bad

票数最高的比赛在顶部,票数最多的比赛在底部。

这是我写的mysql查询,显然是错误的,但希望有人能帮助我:

mysql_query("
    SELECT m.Title, r.Subject, v.ReviewID FROM Movies m
        LEFT JOIN Reviews r
            ON m.ID=r.MovieID
        INNER JOIN Votes v
            ON r.ID=v.ReviewID
        WHERE (m.Title LIKE '%" . $search . "%'
            OR r.Subject LIKE '%" . $search . "%')
        ORDER BY MAX(COUNT(v.IsGood='1')) LIMIT 10")or die(mysql_error());

【问题讨论】:

  • 你需要在m.Title, r.Subject, v.TipID上做一个小组,或者做一个子选择来计算收到的票数。
  • 感谢 Paul 的回复。你能给我举个例子吗?也许是一个链接?我会搜索你刚才建议的内容。
  • 尝试在 ORDER BY 子句之前添加GROUP BY m.Title, r.Subject, v.TipID,应该可以!
  • 我刚试了一下,出现“组函数使用无效”的错误...我还将上面的拼写错误从“TipID”更正为“ReviewID”

标签: php mysql search join count


【解决方案1】:

这是一个更完整的答案。 要从一组连接的表行中获得总和或好票和坏票,您需要将类似的行组合在一起。

应该给你想要的结果。

mysql_query("
    SELECT m.Title, r.Subject, v.TipID, sum(v.IsGood) as IsGood, sum(v.isBad) as isBad FROM Movies m
        LEFT 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, v.TipID
        ORDER BY sum(v.IsGood) desc, sum(v.isBad) asc LIMIT 10")or die(mysql_error());

【讨论】:

  • 我按照你在这里展示的方式进行了 sql 查询。但它返回 0,现在我的问题是,如果我目前没有投票,那会是问题吗?是否需要先添加某种 if 条件来检查是否有票?
  • 我刚刚添加了一些投票,现在它完美运行。好的,从这里开始,我对如何处理选票犹豫不决。我应该先添加一些东西来检查是否有投票吗?人们会认为没有投票的比赛应该在名单中间,因为没有好坏之分,对吧?
  • 您可能应该将投票上的INNER JOIN 更改为LEFT JOIN,这将导致即使没有投票也会返回电影
猜你喜欢
  • 2023-04-10
  • 2011-12-20
  • 2023-03-30
  • 2017-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
相关资源
最近更新 更多