sql 按着时间分组,每组取 20 条数据

sql表:

    ```sql
CREATE TABLE `cms_forum` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `article_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '文章id',
  `article_title` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '文章标题',
  `article_link` varchar(200) NOT NULL COMMENT '链接',
  `user_nick` varchar(20) NOT NULL COMMENT '用户昵称',
  `article_summary` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '文章摘要',
  `article_pubdate` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '文章发表时间',
  `article_pic` varchar(250) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '文章图片',
  `editor_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '编辑id',
  `editor_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '编辑姓名',
  `editor_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '操作时间',
  `is_del` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否删除:0 没有 1 删除',
  `is_publish` tinyint(10) unsigned NOT NULL DEFAULT '0' COMMENT '是否发布:0 未发布,1 发布',
  `is_recommend` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否推荐:0->未推荐,1->已推荐',
  `order_by` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
  `article_time` int(4) NOT NULL DEFAULT '2020',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1909 DEFAULT CHARSET=utf8 COMMENT='专题';


按着  article_time(存的是年份) 字段进行分组,每组各取10条数据?
主要实现:一个按着年份划分的时间线


实现的效果:https://cdn.learnku.com/uploads/images/202007/13/16567/s7waqZtUro.png!large
本作品采用《CC 协议》,转载必须注明作者和本文链接
chenBJ
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2
chenBJ
$num = intval($num);
        $list = DB::select("SELECT * FROM cms_forum m WHERE(SELECT COUNT(*) FROM cms_forum n WHERE m.article_time = n.article_time AND n.id > m.id AND n.is_del=0)<'".$num."' AND is_publish=1 AND is_del=0 ORDER BY add_time,article_time DESC");
        return $list;
3年前 评论
游离不2
SELECT
    *
FROM (
    SELECT
        if(@tmp = article_time, @rank := @rank + 1, @rank := 1) AS rank,
        @tmp := article_time AS tmp,
        f.*
    FROM
        cms_forum f
    ORDER BY
        article_time DESC, order_by asc, id desc
) a
WHERE
    rank <= 10

试试这个,每个分组内的排序,自己改改

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!