我有两个表。一个用于movies
(列出id,movie_title,movie_director
等),另一个是likes
表:它记录有多少人将任何特定的电影添加到他们的收藏夹中。它只有两个字段movie_id, user_id
。两者都是对应表(movies
和users
)中的foreign key references
。
现在我想显示所有按点赞数排序的电影
所以我必须使用select查询,在它里面我必须通过子查询来排序,子查询计算每部电影的点赞数。
像这样的东西?
select *
from movies
inner join likes
on movies.id=likes.movie_id
order by (
select count *
from likes
where movie_id=?
)
我真的被困在这里了。Likes表具有类似的结构
user_id 1,movie_id 2, user_id 2, movie_id 2
所以在选择时,我应该在其他人之前获得id为2的电影,因为它有2个赞。
但是怎么做呢?
Ahmar。
您必须计算点赞数并按计数排序:
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
这将按降序进行(最喜欢的是第一个)
您可以使用启动的子查询方法来完成此操作。关键是删除外部联接,只使用相关的子查询:
select *
from movies
order by (select count(*)
from likes
where movies.id = likes.movie_id
) desc;
您可以使用group-by-statement来实现这一点。
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;
根据上述评论,这将排除没有点赞的电影。但最好从简单开始。