MYSQL子查询内部连接顺序由count计算

时间:2014-10-07 18:12:16

标签: php mysql sql

我有两张桌子。一个用于movies(列出id,movie_title,movie_director等),另一个用于likes表:用于跟踪有多少人将任何特定电影添加到他们的收藏夹中。它只有两个字段movie_id, user_id。两者都来自相应表格foreign key referencesmoviesusers)。

现在我想显示按大部分喜欢的方式排序的所有电影。

所以我必须使用选择查询,在里面我必须通过子查询来订购它,它会计算每部电影的喜欢数量。

这样的东西?

select * 
from movies 
inner join likes 
on movies.id=likes.movie_id 
order by (
    select count * 
    from likes 
    where movie_id=?
)

我真的被困在这里了。喜欢表有这样的结构

user_id 1,movie_id 2, user_id 2, movie_id 2

因此,在选择时我应该先获得id为2的电影,因为它有2个喜欢。

但怎么办呢?

艾哈迈尔。

3 个答案:

答案 0 :(得分:4)

你必须计算喜欢并按计数排序:

select m.id,
       m.movie_title,
       m.movie_director,
       count(l.movie_id) as num_likes
  from movies m
  left join likes l
    on m.id = l.movie_id
 group by m.id, m.movie_title, m.movie_director
 order by num_likes desc

这将按降序排列(大部分首先喜欢)

答案 1 :(得分:1)

您可以使用group by语句来实现此目的。

select m.id, count(*) as POPULARITY 
from movies m inner join likes l on m.id = l.movie_id 
group by m.id
order POPULARITY desc;

根据上述评论,这将排除没有喜欢的电影。但最好从简单开始。

答案 2 :(得分:1)

您可以使用您启动的子查询方法执行此操作。关键是要删除外连接,只使用相关的子查询:

select * 
from movies
order by (select count(*)
          from likes 
          where movies.id = likes.movie_id 
         ) desc;