有一个表格:t_news
每个新闻的分类并不一致。也就是说,它可能是前两个新闻第一类,然后第三个,然后第五个,等等。
需要按日期排序,每个类别都有5个新闻。
输出应该类似于以下内容(例如,3条新闻,第3类)
id title cat
1 News1 1
2 News2 1
3 News3 1
4 News4 2
5 News5 2
6 News6 2
7 News7 3
8 News8 3
9 News9 3发布于 2013-08-12 10:03:31
在MySQL中,可以使用变量创建行号列:
SELECT id, title, cat
FROM ( SELECT id,
title,
cat,
@r:=IF(@cat = cat, @r+1, 1) AS RowNum ,
@cat:= cat AS Cat2
FROM t_news,
(SELECT @cat:= 0) AS cat,
(SELECT @r:= 0) AS r
ORDER BY cat, id
) t
WHERE RowNum <= 5;如果cat列与@cat变量(从上一行设置)相同,则键位于每一行,则行号增加1。否则,它将重置为0。增量的顺序由子查询中的order子句设置(由于您发布的模式不包括date列,所以我使用了ID )。
SQL Fiddle示例
发布于 2013-08-12 12:00:37
总代码:
SELECT id, title, cat, from_unixtime(date) `date` FROM (
SELECT id, title, cat, `date`
FROM
(
SELECT id, title, cat, `date`, @r:=IF(@cat = cat, @r+1, 1) AS RowNum , @cat:= category AS Cat2
FROM news, (SELECT @cat:= 0) AS cat, (SELECT @r:= 0) AS r
WHERE hide=0
ORDER BY cat, `date` DESC, id
) t
WHERE RowNum <= 4 LIMIT 16
) t2
ORDER BY `date` DESC;@GarethD,谢谢
https://stackoverflow.com/questions/18183903
复制相似问题