MYSQL子查询内部连接顺序的计数
我有两个表。一个用于movies
(其中列出id,movie_title,movie_director
等)和其他是likes
表:它跟踪有多少人已经将任何特定电影添加到他们的收藏夹。它只有两个字段movie_id, user_id
。两者均来自相应表格(movies
和users
)的foreign key references
。MYSQL子查询内部连接顺序的计数
现在我想要显示按大部分喜欢排序的所有电影。
所以我必须使用选择查询,并在里面我必须通过子查询命令它计数每个电影喜欢的数量。
这样的事情?
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所喜欢的时候。
但是怎么做呢?
Ahmar。
你可以用你开始的子查询方法来做到这一点。关键是删除外部联接,并使用相关的子查询:
select *
from movies
order by (select count(*)
from likes
where movies.id = likes.movie_id
) desc;
你必须计数来算喜欢和排序:
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
这将降序这样做(最喜欢的第一个)
您可能希望使用LEFT JOIN不会失去所有不喜欢的电影。 – 2014-10-07 18:16:52
@JoachimIsaksson好点,改为 – 2014-10-07 18:18:30
'count(ifnull(l.movie_id,0))'当'l.movie_id'为空时会返回1。 'count(l.movie_id)'应该足够了 – FuzzyTree 2014-10-07 18:22:06
你可以用一组由语句实现这一目标。
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;
根据以上评论,这将排除没有喜欢的电影。但更好地开始简单。
那正是我想要的:) – 2014-10-07 18:51:25