sql - 在查询中限制 MySQL 结果

标签 sql mysql limit

我想看看我是否可以通过单个查询获得我需要的结果,而我的 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/

相关文章:

mysql - 任何人都可以通过汇总和排名查询来帮助我进行分组吗?

sql - 如何获取某个日期范围内用户每天的首次登录

mysql - 限制查询不能生效

c# - 如何使用c#中的程序检查堆栈内存的大小

mysql - 使用 LEFT JOIN 返回不匹配的行

mysql - View 上的读取操作更快还是在表上?

java - 无法检索我希望使用存储过程选择的值

mysql - 为什么 INT(11) 只存储 10 位数字?

mysql - 如何删除MySQL数据库的部分记录?

mysql - LIMIT 1 有任何性能提升吗?