我正在查看是否可以通過單個查詢獲得我需要的結果,而且我的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