我正在寻找是否可以通过单个查询获得所需的结果,而我的 MySQL 技能在这里还处于青春期。
我有 4 个表:shows
、artists
和。我现在的主要查询的简化版本如下所示:venues
tours
SELECT *
FROM artists AS a,
venues AS v,
shows AS s
LEFT JOIN tours AS t ON s.show_tour_id = t.tour_id
WHERE s.show_artist_id = a.artist_id
AND s.show_venue_id = v.venue_id
ORDER BY a.artist_name ASC, s.show_date ASC;
我想补充的是每个艺术家返回多少节目的限制。我知道我可以SELECT * FROM artists
,然后LIMIT
为每个返回的行运行一个带有简单子句的查询,但我认为必须有一种更有效的方法。
更新:更简单地说,我想为每位艺术家选择最多 5 场演出。我知道我可以做到这一点(去掉所有不相关的东西):
<?php
$artists = $db->query("SELECT * FROM artists");
foreach($artists as $artist) {
$db->query("SELECT * FROM shows WHERE show_artist_id = $artist->artist_id LIMIT 5");
}
?>
foreach
但是将另一个查询放在循环中似乎是错误的。我正在寻找一种在一个结果集中实现这一目标的方法。