Без отображения airing.channel
:
SELECT s.project_id,
s.title,
s.description,
s.topic,
s.status,
MIN(a.start_time)
FROM show s
LEFT JOIN episode e ON s.project_id = e.project_id
LEFT JOIN airing a ON e.episode_id = a.episode_id
AND a.start_time > NOW()
WHERE s.status = "Active" AND s.title LIKE "a%"
GROUP BY s.project_id
ORDER BY s.title ASC
Отображение channel
тоже:
SELECT s.project_id,
s.title,
s.description,
s.topic,
s.status,
( SELECT a.start_time
FROM airing AS a
JOIN episode AS e ON e.episode_id = a.episode_id
WHERE s.project_id = e.project_id
AND a.start_time > NOW()
ORDER BY a.start_time
LIMIT 1
)
AS start_time,
( SELECT a.channel
FROM airing AS a
JOIN episode AS e ON e.episode_id = a.episode_id
WHERE s.project_id = e.project_id
AND a.start_time > NOW()
ORDER BY a.start_time
LIMIT 1
)
AS channel
FROM show s
WHERE s.status = "Active" AND s.title LIKE "a%"
ORDER BY s.title ASC
или:
SELECT s.project_id,
s.title,
s.description,
s.topic,
s.status,
a.start_time,
a.channel
FROM show s
LEFT JOIN airing a ON a.airing_id =
( SELECT a.airing_id
FROM airing AS a
JOIN episode AS e ON e.episode_id = a.episode_id
WHERE s.project_id = e.project_id
AND a.start_time > NOW()
ORDER BY a.start_time
LIMIT 1
)
WHERE s.status = "Active" AND s.title LIKE "a%"
ORDER BY s.title ASC
Если они медленные, сообщитенам, какие у вас индексы для таблиц и какие типы полей.