• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    mysql group by与order by的研究--分类中最新的内容
    这两天让一个数据查询难了。主要是对group by 理解的不够深入。才出现这样的情况
    这种需求,我想很多人都遇到过。下面是我模拟我的内容表
    复制代码 代码如下:

    CREATE TABLE `test` (
    `id` INT(10) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(255) NOT NULL,
    `category_id` INT(10) NOT NULL,
    `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
    )
    ENGINE=MyISAM
    ROW_FORMAT=DEFAULT;
    INSERT INTO `test` (`id`, `name`, `category_id`, `date`)
    VALUES
    (1, 'aaa', 1, '2010-06-10 19:14:37'),
    (2, 'bbb', 2, '2010-06-10 19:14:55'),
    (3, 'ccc', 1, '2010-06-10 19:16:02'),
    (4, 'ddd', 1, '2010-06-10 19:16:15'),
    (5, 'eee', 2, '2010-06-10 19:16:35');


    我现在需要取出每个分类中最新的内容
    复制代码 代码如下:

    select * from test group by category_id order by `date`

    结果如下

    明显。这不是我想要的数据,原因是msyql已经的执行顺序是

    引用

    写的顺序:select ... from... where.... group by... having... order by..
    执行顺序:from... where...group by... having.... select ... order by...

    所以在order by拿到的结果里已经是分组的完的最后结果。
    由from到where的结果如下的内容。

    到group by时就得到了根据category_id分出来的多个小组


    到了select的时候,只从上面的每个组里取第一条信息结果会如下

    即使order by也只是从上面的结果里进行排序。并不是每个分类的最新信息。
    回到我的目的上 --分类中最新的信息
    根据上面的分析,group by到select时只取到分组里的第一条信息。有两个解决方法
    1,where+group by(对小组进行排序)
    2,从form返回的数据下手脚(即用子查询)

    由where+group by的解决方法
    对group by里的小组进行排序的函数我只查到group_concat()可以进行排序,但group_concat的作用是将小组里的字段里的值进行串联起来。
    select group_concat(id order by `date` desc) from `test` group by category_id


    再改进一下
    select * from `test` where id in(select SUBSTRING_INDEX(group_concat(id order by `date` desc),',',1) from `test` group by category_id ) order by `date` desc



    子查询解决方案
    select * from (select * from `test` order by `date` desc) `temp`  group by category_id order by `date` desc


     

    您可能感兴趣的文章:
    • mysql中count(), group by, order by使用详解
    • 深度分析mysql GROUP BY 与 ORDER BY
    • mysql中order by与group by的区别
    • 深入解析mysql中order by与group by的顺序问题
    • Mysql中order by、group by、having的区别深入分析
    • mysql分组取每组前几条记录(排名) 附group by与order by的研究
    • MySQL group by和order by如何一起使用
    上一篇:sql 左连接和右连接的使用技巧(left join and right join)
    下一篇:MSSQL转MySQL数据库的实际操作记录
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    mysql group by与order by的研究--分类中最新的内容 mysql,group,与,order,的,研究,