php - MYSQL子查询内连接order by count

标签 php mysql sql

我有两张 table 。一个用于 movies(其中列出了 id、movie_title、movie_director 等),另一个是 likes 表:它跟踪有多少人添加了任何特定的电影到他们的最爱。它只有两个字段movie_id, user_id。两者都是来自相应表(moviesusers)的外键引用

现在我想显示所有按喜欢次数最多排序的电影。

所以我必须使用选择查询,并且在其中我必须通过子查询对其进行排序,子查询计算每部电影的点赞数。

是这样的吗?

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 个赞。

但是怎么做呢?

艾玛。

最佳答案

你必须计算点赞数并按计数排序:

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

这将按降序进行(最喜欢的在前)

关于php - MYSQL子查询内连接order by count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26242454/

相关文章:

php - Zend 框架 : How to set _one_ default error handler for all modules?

php - 显示结果并隐藏重复项

sql - 从连接表中获取额外数据

php - 将多行表连接到一行

sql - 为了更新而更新?

php - 选择列表菜单回显

javascript - 想要打印带有外部样式表的 div 部分

php - 将 url service.php?p_id=1&s_id=4 重写为 service/seo

mysql - 复合索引中列的顺序

php - 为什么我的sql语句在数据库中插入两行?