Я ищу, чтобы узнать, могу ли я получить результаты, которые мне нужны, с одним запросом, и мои навыки 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
для каждой возвращенной строки, но я считаю, что должен быть более эффективный способ.
UPDATE: Чтобы это проще сказать, я хочу выбрать до 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? –
Не то, чтобы я не хотел использовать 'LIMIT' - мне нужно использовать' LIMIT' * для каждого исполнителя *, а не для всего запроса. Поэтому, если у меня есть 5 исполнителей, и у всех их есть 5 или более шоу, я хочу 25 итоговых результатов (или меньше, если у некоторых из исполнителей меньше 5 показов). Имеет ли это смысл? –