我希望提取表格中某个类别的前10个结果,按日期排序。我的表看起来像
CREATE TABLE IF NOT EXISTS Table
( name VARCHAR(50)
, category VARCHAR(50)
, date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
到目前为止,我已经提出了SELECT category FROM Table GROUP BY category;
,这将为我提供商店中的每个类别。
接下来,我需要在第一条指令送给我的每个SELECT * FROM Table WHERE category=$categ ORDER BY date DESC LIMIT 10;
的某种foreach循环中运行$categ
。
如果可能的话,我想在MySQL中完成所有这些工作;我在网上遇到了几个答案,但它们似乎都涉及两个或更多的表格,或者提供难以理解的难题......我觉得可以在服务器中处理这么简单的事情似乎很愚蠢代码(除了不必要的类别名称存储之外,甚至不会产生那么大的开销)很难转化为SQL代码,但如果没有什么可行的,那么我最终会做什么,我想。
答案 0 :(得分:1)
您可以使用内联视图和用户定义的变量来设置“行号”列,然后外部查询可以根据“行号”列进行过滤。 (这样做,我们可以模拟ROW_NUMBER分析函数。)
对于大型集合,这可能不是最有效的方法,但它适用于小集合。
外部查询看起来像这样:
SELECT q.*
FROM (
<view_query>
) q
WHERE q.row_num <= 10
ORDER
BY q.category, q.date DESC, q.name
视图查询将是这样的
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