【发布时间】:2022-01-04 03:53:51
【问题描述】:
我这里有一个问题,我想知道是否可以只在一个查询中执行此操作,而不是让服务器执行多个查询。
所以事情就是这样,我想要的是,在每个类别中,在 24 家商店的限制内搜索属于该类别的所有商店。也就是说,假设我注册了 5 个类别,我将搜索属于该类别的 24 家商店,得出的结论是,我将在查询结果中总共有 120 家商店。
以下代码是一个示例,但这只会获取任何类别的前 24 个商店,而不会遍历每个类别。
SELECT *
FROM categories c
LEFT JOIN (SELECT * FROM stores_categories LIMIT 24 OFFSET 0) sc ON sc.id_category = c.id
WHERE type = 'STORE' OR type = 'ALL';
有人给我发了这个,它与我的问题非常相似,How to SELECT the newest four items per category?,有点像那样,但我希望能够限制和偏移来制作页面,而不仅仅是前 24 个最近的在每个类别中。
我得到的链接中的示例代码:
SELECT sc1.*
FROM stores_categories sc1
LEFT OUTER JOIN stores_categories sc2 ON (sc1.id_category = sc2.id_category AND sc1.id_store < sc2.id_store)
GROUP BY sc1.id_store
HAVING COUNT(*) < 24
ORDER BY sc1.id_category;
我的数据库服务器是5.5.64-MariaDB版本。一个小提琴示例,可以使用我的数据库中的相同值进行测试。 https://www.db-fiddle.com/f/jcowJL9S4FQXqKg2yMa8kf/0
【问题讨论】:
-
示例数据必须以文本 CREATE TABLE + INSERT INTO 脚本或在线小提琴的形式提供。它们必须随附此源数据的所需输出和详细说明。 我使用的是 5.6 版的 MariaDB。 显示
SELECT VERSION();输出。 -
感谢您的建议,已编辑。
-
在我添加的标签中查找更多示例。
-
感谢您的建议。
标签: mysql sql mariadb greatest-n-per-group