Php 如何使用LIKE for mysql搜索,并根据投票表中大多数行/投票数进行连接和排序?

Php 如何使用LIKE for mysql搜索,并根据投票表中大多数行/投票数进行连接和排序?,php,mysql,search,join,count,Php,Mysql,Search,Join,Count,我需要在搜索中使用三个表:电影、评论和投票。我想对电影使用LIKE功能。标题和评论。主题,并按每场比赛的最多票数排序 在投票表中有一个ReviewID,UserID,IsGood。每次用户投票时,都会使用MovieID、UserID和1或0来插入IsGood,1表示好,0表示坏 因此,一次审查可能有0个好票和不好票,或5个好票和3个坏票,等等。我想按以下顺序显示结果: 回顾1-10Good/3Bad 回顾2-4好/3坏 回顾3-0好/0坏 得票最多的比赛在顶部,得票最差的比赛在底部 这是我写的m

我需要在搜索中使用三个表:电影、评论和投票。我想对电影使用LIKE功能。标题和评论。主题,并按每场比赛的最多票数排序

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

因此,一次审查可能有0个好票和不好票,或5个好票和3个坏票,等等。我想按以下顺序显示结果:

回顾1-10Good/3Bad

回顾2-4好/3坏

回顾3-0好/0坏

得票最多的比赛在顶部,得票最差的比赛在底部

这是我写的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());
这里有一个更完整的答案。 要从一组联接的表行中获得总和或好票和坏票,需要将类似的行分组在一起

下面应该会给出你想要的结果

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());
这里有一个更完整的答案。 要从一组联接的表行中获得总和或好票和坏票,需要将类似的行分组在一起

下面应该会给出你想要的结果

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());

您需要在
m.Title、r.Subject、v.TipID上进行分组,或者进行一次子选择以计算收到的投票数。谢谢您的回复。你能给我举个例子吗?也许是链接?我将搜索您刚才建议的内容。尝试在ORDER BY子句之前添加
GROUP BY m.Title,r.Subject,v.TipID
,这样就可以了!我刚试过,我得到一个“无效使用组函数”错误。。。此外,我还将我上面的输入错误从“TipID”改为“ReviewID”。您需要在
m.Title、r.Subject、v.TipID
上进行分组,或者进行一次子选择以计算收到的投票数。谢谢您的回复。你能给我举个例子吗?也许是链接?我将搜索您刚才建议的内容。尝试在ORDER BY子句之前添加
GROUP BY m.Title,r.Subject,v.TipID
,这样就可以了!我刚试过,我得到一个“无效使用组函数”错误。。。此外,我还将上面的输入错误从“TipID”改为“ReviewID”,我按照您在这里演示的方式执行了sql查询。但是它返回0,现在我的问题是,如果我现在没有投票权,这会是问题吗?我需要添加一些if条件来检查是否有投票吗?我刚刚添加了一些投票,现在它工作得很好。好吧,从这里开始,我对如何接近选票犹豫不决。我是否应该先添加一些内容来检查是否有投票?有人会认为没有投票的比赛应该是在列表的中间,因为它不是好的或坏的,对吗?你可能只需要把<代码>内部连接< /代码>改为<代码>左连接< /代码>,这将导致电影被归还,甚至没有VoTeSi像你在这里给我展示的SQL查询一样。但是它返回0,现在我的问题是,如果我现在没有投票权,这会是问题吗?我需要添加一些if条件来检查是否有投票吗?我刚刚添加了一些投票,现在它工作得很好。好吧,从这里开始,我对如何接近选票犹豫不决。我是否应该先添加一些内容来检查是否有投票?有人会认为没有投票的比赛应该是在名单的中间,因为它不是好的或坏的,对吗?你可能只需要把<代码>内部连接<代码>改为<代码>左连接< /代码>,这将导致电影在没有投票的情况下被归还。