V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mechille
V2EX  ›  问与答

PHP+MYSQL 的一个处理列表结果的问题

  •  
  •   mechille · 2015-01-11 15:37:30 +08:00 · 1863 次点击
    这是一个创建于 3603 天前的主题,其中的信息可能已经有所发展或是发生改变。
    按照一定条件从MYSQL中搜索出了一个列表,按照时间倒序排列,请问如何给日期加上节点标记,做成类似如下的效果:

    今天
    --------
    --------
    --------

    昨天
    --------
    --------
    --------

    前天
    --------
    --------
    --------

    以此类推
    2 条回复    2015-01-11 22:43:37 +08:00
    jianghu52
        1
    jianghu52  
       2015-01-11 18:27:24 +08:00
    如果不考虑性能的话,我一般是这么做的。
    数据库查两遍,第一遍,查询所有的记录,日期格式为20150111,赋值给detail_list
    第二遍,查询有数据的所有日期,group by一下,得到的数据是 20150111,20150110,20150109这样的一组数据。赋值给date_list
    之后的代码如下
    foreach( $date_list as $one_date )
    {
    print($one_date);//输出 日期
    foreach( $detail_list as $one_detail )
    {
    if($one_date['date'] == $one_detail['date']){//相同日期的情况下输出具体内容
    print($one_detail);
    }
    }
    }
    如果你要考虑性能的话,也可以写sql文,得到的格式类似于
    0000 20150111//这一行就需要你自己添加出来,这一条记录实际在表中是不存在的
    1 20150111
    2 20150111
    0000 20150110
    1 20150110
    2 20150110
    抱歉sql不是很好,一下想不出要怎么写。但是我保证这个sql一定能写出来,因为我用到过。
    hiro0729
        2
    hiro0729  
       2015-01-11 22:43:37 +08:00
    倒序的数据取出来后,直接循环判断就行了吧。
    用php的Carbon日期处理类,先在循环外层取一个当前时间的变量。然后在循环内部用diffInDays方法算出数据中的时间和当前时间相差的天数。
    相差天数为0是今天的数据,1为昨天.....一次类推,在if ,else if里你想为数据多填个“今天”的标记也好,还是归类分组放入新的array里也好,想怎么样就怎么样,不需要考虑sql怎么写了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5157 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 09:28 · PVG 17:28 · LAX 01:28 · JFK 04:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.