登录

php如何在每个日期下显示数据;同mysql语句 优化性能

@数据库设计
id pay_name pay_time(时间戳int)

@如何像图一样,按时间对该表进行排列,相同时间的数据排在一起

@之前的方案是
首选group by(pay_time)得到所有的时间
在每个时间下,循环所有的数据来对比时间是否和以上时间相等,但每次都要对比所有的时间。
但这样浪费性能。

# PHP
PHPzhongPHPzhong2147 天前391 次浏览

全部回复(2) 我要回复

  • 大家讲道理

    大家讲道理2017-04-10 17:02:08

    1、首先要给pay_time加上索引。

    2、按照时间从数据库中取出你需要的数据数量,select * from table where pay_time >=t1 and pay_time < t2 order by pay_time desc limit pageSize;

    3、在前端对你的数据按照时间进行分组。

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 17:02:08

    SET sql_mode = ''; --不加这一条语句group by 会报错 ,加了又不太安全。建议再加个varchar类型的字段保存时间,加了字段后就不用FROM_UNIXTIME()函数了
    
    select *,FROM_UNIXTIME(a.pay_time,"%Y-%m-%d") as ptime 
    FROM test a LEFT JOIN test b on 
    FROM_UNIXTIME(a.pay_time,"%Y-%m-%d") = FROM_UNIXTIME(b.pay_time,"%Y-%m-%d")
     and a.id >= b.id GROUP BY a.id,a.pay_name,datas 
     HAVING count(b.id) <= 3 ORDER BY a.pay_time,a.id
    count(b.id) <= 3 //这里的 3 是每个时间段的条数

    之后再对数据根据 ptime 进行分组就行了

    回复
    0
  • 取消回复发送