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

2015-01-11 15:37:30 +08:00
 mechille
按照一定条件从MYSQL中搜索出了一个列表,按照时间倒序排列,请问如何给日期加上节点标记,做成类似如下的效果:

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

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

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

以此类推
1855 次点击
所在节点    问与答
2 条回复
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
2015-01-11 22:43:37 +08:00
倒序的数据取出来后,直接循环判断就行了吧。
用php的Carbon日期处理类,先在循环外层取一个当前时间的变量。然后在循环内部用diffInDays方法算出数据中的时间和当前时间相差的天数。
相差天数为0是今天的数据,1为昨天.....一次类推,在if ,else if里你想为数据多填个“今天”的标记也好,还是归类分组放入新的array里也好,想怎么样就怎么样,不需要考虑sql怎么写了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/161124

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX