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

mysql 如何根据发帖的时间戳去统计当天的发帖量?

  •  
  •   lg2016 · 2016-04-15 03:30:24 +08:00 · 2005 次点击
    这是一个创建于 3180 天前的主题,其中的信息可能已经有所发展或是发生改变。

    1 、在 publish 表有一个 pubtime 字段用来存储发帖的时候的时间戳( 10 位),现在我想写一句 sql 查询语句 求当天所有的帖子总量!

    下面的查询语句是我想了一晚上的结果,不过没有什么卵用!

    求高手指点下。

    select count(*) from publish Where DATE_FORMAT(FROM_UNIXTIME(pubtime),'Y-m-d')) = DATE_FORMAT(NOW(),'Y-m-d');

    14 条回复    2016-04-15 12:57:53 +08:00
    lg2016
        1
    lg2016  
    OP
       2016-04-15 08:46:56 +08:00
    大家还没上班?
    zouguolvyi
        2
    zouguolvyi  
       2016-04-15 09:41:18 +08:00
    可以在程序中将当天的时间戳范围算出来,然后用 between and 来解决。
    dangyuluo
        3
    dangyuluo  
       2016-04-15 10:09:08 +08:00 via iPhone
    建议你多睡点觉,调整一下作息
    onion83
        4
    onion83  
       2016-04-15 10:25:32 +08:00 via iPhone
    离真相近了,给个思路,用 group by
    bianzhifu
        5
    bianzhifu  
       2016-04-15 10:59:30 +08:00   ❤️ 1
    SELECT
    from_unixtime(pubtime, '%Y-%m-%d'),
    COUNT(*)
    FROM
    publish
    GROUP BY
    from_unixtime(pubtime, '%Y-%m-%d');
    lg2016
        6
    lg2016  
    OP
       2016-04-15 11:02:47 +08:00
    @bianzhifu 楼上真相,谢谢了!
    lg2016
        7
    lg2016  
    OP
       2016-04-15 11:06:06 +08:00
    @dangyuluo 嗯,纠结了一晚,以后会注意的。
    bianzhifu
        8
    bianzhifu  
       2016-04-15 11:12:35 +08:00
    SELECT
    count(*)
    FROM
    publish
    WHERE
    pubtime >= floor(unix_timestamp(now()) / 86400) * 86400 - 28800
    bianzhifu
        9
    bianzhifu  
       2016-04-15 11:13:23 +08:00
    @lg2016 这个是获取当天的 过来 24 点会变成 0
    lg2016
        10
    lg2016  
    OP
       2016-04-15 11:19:23 +08:00
    @bianzhifu 嗯,已收到,下课了,我再研究!
    bianzhifu
        11
    bianzhifu  
       2016-04-15 11:20:09 +08:00
    @lg2016 更新下 sql 上面的 sql 错误了 没有考虑到时间戳 从 8 点开始
    SELECT
    count(*)
    FROM
    publish
    WHERE
    pubtime >= floor(
    (unix_timestamp(now()) + 28800) / 86400
    ) * 86400 - 28800
    peter999
        12
    peter999  
       2016-04-15 11:24:31 +08:00
    不如发帖的时候累加到记录表里,节省开销
    lg2016
        13
    lg2016  
    OP
       2016-04-15 12:53:47 +08:00
    @zouguolvyi @onion83 根据你们的思路,写出下面这段查询语句

    $today = date('Y-m-d');
    $tomorrow = date('Y-m-d',strtotime('+1 day'));

    $sql = "select DATE_FORMAT(FROM_UNIXTIME(pubtime),'%Y-%m-%d') as todayr_date,count(*) as today_sum from publish where DATE_FORMAT(FROM_UNIXTIME(pubtime),'%Y-%m-%d') between '{$today}' and '{$tomorrow}' group by todayr_date";
    lg2016
        14
    lg2016  
    OP
       2016-04-15 12:57:53 +08:00
    @peter999 先阶段写着玩的,就 10 多条记录,暂时不用写到表里面,如果很多的话那一定要写到表里面。

    另外再问大家一个问题, select 查询语句中是否不要大量的出现函数语句,听说会出现很多问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2516 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:33 · PVG 23:33 · LAX 07:33 · JFK 10:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.