多个ORDER BY(获取最新元素)MySQL

时间:2015-04-25 14:01:18

标签: mysql sql select sql-order-by

我有以下表格:无线电,播客和节目。收音机有很多播客,播客有很多节目。每个播客都可以按其历史记录进行排序,每个节目都可以通过其publication_date进行排序。

我希望获得与其最新节目相关的所有播客。

查询如下:

SELECT r.name AS radio_name,Pod.*,Sh.* 
FROM podcasts Pod 
  INNER JOIN radios r ON (r.id=Pod.radio_id) 
  INNER JOIN shows Sh ON (Sh.podcast_id=Pod.id) 
ORDER BY Pod.history LIMIT 5

我想要第二个ORDER BY Sh.publication_date,但我真的不知道它应该在哪里。

2 个答案:

答案 0 :(得分:3)

如果您只想要每个播客的最新节目,那么您需要一些获取该信息的内容。这是一种方法:

SELECT r.name AS radio_name,Pod.*,Sh.* 
FROM podcasts Pod INNER JOIN
     radios r
     ON r.id = Pod.radio_id INNER JOIN
     shows Sh
     ON Sh.podcast_id = Pod.id 
WHERE NOT EXISTS (select 1
                  from shows sh2
                  where sh2.podcast_id = sh.podcast_id.id and
                        sh2.publication_date > sh.publication_date
                 )
ORDER BY sh.publication_date DESC
LIMIT 5;

除了显而易见的"在连接列上的索引,您还需要shows(podcast_id, publication_date)上的索引。

我也猜测您希望按最近的 show 发布日期排序结果。

答案 1 :(得分:0)

您可以在order by子句中使用逗号分隔几个表达式:

SELECT r.name AS radio_name,Pod.*,Sh.* 
FROM podcasts Pod 
  INNER JOIN radios r ON (r.id=Pod.radio_id) 
  INNER JOIN shows Sh ON (Sh.podcast_id=Pod.id) 
ORDER BY Pod.history, Sh.publication_date LIMIT 5
------------- Here -^