我有以下表格:收音机,播客和节目。收音机有许多播客,播客有许多节目。每一个播客都可以按其历史顺序排列,每一个节目都可以按其出版日期排列。
我想得到所有与他们最新节目相关的播客。
查询如下所示:
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
我想再来一次,但我不知道应该在哪里。
最佳答案
如果你只想要每个播客的最新节目,那么你需要一些什么来获得这些信息。有一种方法:
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)
上有一个索引。我也猜你想让结果按最近的节目出版日期排序。