簡體   English   中英

MYSQL子查詢按計數的內部聯接順序

[英]MYSQL sub query inner join order by count

我有兩張桌子。 一個movies (其中列出了id,movie_title,movie_director等)和另一種是likes表:以跟蹤有多少人添加任何特定的電影在他們的收藏。 它只有兩個字段movie_id, user_id 兩者都是來自相應表( moviesusers )的foreign key references

現在,我要顯示所有按喜歡數量排序的電影。

因此,我必須使用選擇查詢,並且在其中必須通過子查詢對它進行排序,該子查詢計算每部電影的喜歡次數。

像這樣嗎

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個贊。

但是怎么做呢?

阿瑪

您必須計算喜歡數並按計數排序:

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

這樣會以降序排列(最喜歡的是第一個)

您可以使用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;

根據以上評論,這將排除沒有喜歡的電影。 但是最好從簡單開始。

您可以使用啟動的子查詢方法執行此操作。 關鍵是刪除外部聯接,僅使用相關的子查詢:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM