我正在查看是否可以通过单个查询获得我需要的结果,而且我的MySQL技能仍处于青春期。在查询中限制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
环内的另一查询。我正在寻找一种在一个结果集内实现这一目标的方法。
如果您不想使用LIMIT,您需要向我们提供应该如何完成。 “SHOWS”表中是否有日期字段? – 2009-09-16 15:45:21
并不是我不想使用“LIMIT” - 这是因为我需要使用每个艺术家的“LIMIT”*,而不是整个查询。因此,如果我有5位艺术家,并且他们都有5个或更多的节目,我想要25个总结果(如果某些艺术家少于5个节目,则要少些)。那有意义吗? – 2009-09-16 16:07:12