多订单依据(获取最新元素)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。