Как я могу переформулировать эти два запроса в одном запросе в MySQL?
SELECT * FROM tvnetwork
//this query gives me a list of TV networks
Но сети обычно меняют имена и логотипы, поэтому для каждой из полученных телевизионных сетей:
SELECT name, logo FROM tvnetworkinfo
WHERE id = $tvnetwork.id
AND date_since < NOW()
ORDER BY date_since desc LIMIT 1
//this one gives me the most recent logo and name for the network
Я намеренно оставляю без изменений имя/логотип. Например. Я хочу "NatGeo" вместо старого "National Geographic", но я также хочу "SciFi" вместо еще не реализованного "SyFy".
Я хотел бы получить все в одном запросе. ¿Есть ли способ сделать это?
Чтобы получить самый последний список сетевых имен и логотипов, используйте:
SELECT x.name,
x.logo
FROM (SELECT tni.name,
tni.logo
CASE
WHEN @name = tni.name THEN @rownum := @rownum + 1
ELSE @rownum := 1
END AS rank
@name := tni.name
FROM TVNETWORKINFO tni
-- JOIN TVNETWORK tn ON tn.id = tni.id
JOIN (SELECT @rownum := 0, @name := '') r
WHERE tni.date_since < NOW()
ORDER BY tni.name, tni.date_since DESC) x
WHERE x.rank = 1
Я проигнорировал JOIN в таблице TVNETWORK
, это не показалось необходимым для вывода. Раскомментируйте это, удалив двойной дефис перед ним в запросе, который я предоставил.
LEFT JOIN
& IS NULL
немного медленнее :(