我有以下表格:无线电,播客和节目。收音机有很多播客,播客有很多节目。每个播客都可以按其历史记录进行排序,每个节目都可以通过其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
,但我真的不知道它应该在哪里。
答案 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 -^