多订单依据(获取最新元素)MySQL

多订单依据(获取最新元素)MySQL,mysql,sql,select,sql-order-by,Mysql,Sql,Select,Sql 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

我有以下表格:收音机、播客和节目。收音机有许多播客,播客有许多节目。每个播客可以按其历史记录排序,每个节目可以按其出版日期排序

我想得到所有与他们最新节目相关的播客

查询如下所示:

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.PUBLISION\U date
,但我真的不知道它应该放在哪里。

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 -^

如果你只想为每个播客播放最新的节目,那么你需要一些什么来获得这些信息。这里有一种方法:

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;
除了连接列上的“明显”索引外,您还需要
节目(podcast\u id,publication\u date)
上的索引


我还猜测,您希望按最近的节目发布日期排序结果。

是的,但我希望检索5个播客(限制为5个),每个播客都有最新的节目。按照您描述的方式执行,查询需要1秒以上的时间,这在不超过30秒的情况下是巨大的,因此有些事情正在发生wrong@johnmalkovitch关于查询速度,,在
JOIN
ORDER BY
子句中出现的所有列上都有索引吗?速度的问题在于:当我执行@Mureinik告诉我的请求时,我得到相同的播客5次,这些播客有5个不同的节目(减少发布日期)。我想要5个不同的播客(按他们的历史顺序)和他们的最新节目(按出版日期顺序)。这应该行得通,谢谢,除了我想按他们的历史顺序排列每个播客(这是显示他们可处置性的另一个字段)我只是注意到了一个小问题:我多次收到同一个播客和一个不同的相关节目,我相信这是哪里不存在的情况出了问题,但我不明白为什么。@johnmalkovich。对于每个
podcast.id
这应该只返回一个节目——除非两个节目的日期完全相同。你在一个播客上有多个名字,或者有多个节目的日期相同。你说得对,我有相同日期的节目,有没有一个关键字我可以使用,所以我只需选择一次播客id?如果你想要具有最大值的id,你可以使用类似show id的内容,而不是show date。