我希望通过一个查询就可以得到我需要的结果,而我的mysql技能在这里还处于青春期。
我有4张桌子:showsartistsvenuestours。现在主查询的简化版本如下:

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循环似乎是错误的。我正在寻找一种在一个结果集中实现这一点的方法。

最佳答案

这正是存储过程的用途。
选择艺术家列表,然后循环浏览该列表,将每个艺术家的5个或更少的节目添加到临时表中。
然后,返回临时表。

关于sql - 在查询中限制MySQL结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1432573/

10-12 04:09
查看更多