首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从单个表中选择有条件限制的数据

从单个表中选择有条件限制的数据
EN

Stack Overflow用户
提问于 2013-08-12 09:43:29
回答 2查看 79关注 0票数 0

有一个表格:t_news

  • id
  • 标题

每个新闻的分类并不一致。也就是说,它可能是前两个新闻第一类,然后第三个,然后第五个,等等。

需要按日期排序,每个类别都有5个新闻。

输出应该类似于以下内容(例如,3条新闻,第3类)

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-12 10:03:31

在MySQL中,可以使用变量创建行号列:

代码语言:javascript
复制
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示例

票数 2
EN

Stack Overflow用户

发布于 2013-08-12 12:00:37

总代码:

代码语言:javascript
复制
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,谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18183903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档