我有以下表格:收音机,播客和节目。收音机有许多播客,播客有许多节目。每一个播客都可以按其历史顺序排列,每一个节目都可以按其出版日期排列。
我想得到所有与他们最新节目相关的播客。
查询如下所示:

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)上有一个索引。
我也猜你想让结果按最近的节目出版日期排序。

10-06 01:03