gpt4 book ai didi

mysql - 获取表格中每个类别的前 N ​​个结果

转载 作者:行者123 更新时间:2023-11-29 12:51:52 26 4
gpt4 key购买 nike

我想提取表中某个类别的前 10 个结果,按日期排序。我的 table 看起来像

CREATE TABLE IF NOT EXISTS Table
( name VARCHAR(50)
, category VARCHAR(50)
, date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

到目前为止,我已经想出了SELECT Category FROM Table GROUP BY Category;,这将为我提供商店中的每个类别。

接下来,我需要在某种 foreach 循环中为每个 $categ 运行 SELECT * FROM Table WHERE Category=$categ ORDER BY date DESC LIMIT 10;我按照第一条指示。

如果可能的话,我想在 MySQL 中完成所有这些操作;我在网上遇到了几个答案,但它们似乎都涉及两个或多个表,或者提供了似乎难以理解的困难示例......对我来说,可以在服务器代码中如此简单地处理的事情似乎很愚蠢(除了不必要的类别名称存储之外,甚至不会产生那么多开销)很难转换为 SQL 代码,但我想,如果没有任何效果,这就是我最终要做的事情。

最佳答案

您可以使用内联 View 和用户定义的变量来设置“行号”列,然后外部查询可以根据“行号”列进行过滤。 (这样做,我们可以模拟 ROW_NUMBER 分析函数。)

对于大型集合,这可能不是最有效的方法,但对于小型集合来说它相当有效。

外部查询看起来像这样:

SELECT q.*
FROM (
<view_query>
) q
WHERE q.row_num <= 10
ORDER
BY q.category, q.date DESC, q.name

View 查询将是这样的

         SELECT IF(@cat = t.category,@i := @i + 1, @i := 1) AS row_num
, @cat := t.category AS category
, t.date
. t.name
FROM mytable t
CROSS
JOIN ( SELECT @i := 0, @cat := NULL ) i
ORDER BY t.category, t.date DESC

关于mysql - 获取表格中每个类别的前 N ​​个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24599048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com