【问题标题】:How to display monthwise and week wise records in case of following scenario?在以下情况下如何显示按月和按周记录?
【发布时间】:2013-07-22 09:32:50
【问题描述】:

我在我的网站中使用 PHP 和 MySQL。我的数据库中有一张名为users 的表。它有两个字段,即.user_reg_date(bigint(12)) and user_last_login(bigint(12))。这两个字段以 UNIX TIMESTAMP 格式存储日期。整个表结构如下:

user_id         varchar(32)
user_title      enum('Mr', 'Ms', 'Mrs')
user_first_name varchar(50)
user_last_name  varchar(50)
user_name   varchar(100)
user_password   varchar(50)
user_email  varchar(150)
user_dob    date    
user_hybridauth_p_name  varchar(100)
user_hybridauth_p_uid   varchar(100)
user_reg_date   bigint(12)
user_status     enum('enable', 'disable')
user_subscription   enum('lifetime', 'period')
user_update_date    bigint(12)
user_last_login     bigint(12)
user_last_activity  bigint(12)
user_created_staff_id   varchar(32)
user_updated_staff_id   varchar(32)
user_registered_type    enum('online', 'manual')

现在我想显示记录数,即user_reg_date 在本周日期内的用户数以及user_last_login 在本周内日期内的用户数。其他查询也需要显示上周以及从当前日期开始的最近两周的此类记录计数。 我还想按月显示相同的记录数。谁能帮助我实现这一目标?提前致谢。我试图在两个日期之间获取这样的计数,它在某种程度上工作得很好。它给了我 user_reg_date 的日期计数,而不是最后登录的用户计数。我只是无法编写完美的查询。我为此编写的查询如下:

    SELECT date( FROM_UNIXTIME( user_reg_date ) ) 'Current Date', COUNT( user_reg_date ) 'registered_user_count', COUNT( user_last_login ) 'logged_in_count'
FROM users
WHERE user_reg_date >=1341100800
AND user_reg_date <=1374451200
AND user_last_login >=1341100800
AND user_last_login <=1374451200
GROUP BY date( FROM_UNIXTIME( user_reg_date ) ) , date( FROM_UNIXTIME( user_last_login ) ) 

【问题讨论】:

  • 你有什么错误吗?
  • @vladkras:如果你在谈论我写的查询,那么查询中没有错误,但我只得到 user_reg_date 的计数。在 user_last_login 列下重复相同的计数。这是我的问题。

标签: php mysql sql date unix-timestamp


【解决方案1】:

你可以这样做

SELECT
  (SELECT COUNT(*) 
     FROM users
    WHERE user_last_login BETWEEN UNIX_TIMESTAMP(ADDDATE(CURDATE(), INTERVAL 1-DAYOFWEEK(CURDATE()) DAY))
                              AND UNIX_TIMESTAMP(ADDDATE(CURDATE(), INTERVAL 7-DAYOFWEEK(CURDATE()) DAY))
  ) logged_in_count,
  (SELECT COUNT(*) 
     FROM users
    WHERE user_reg_date   BETWEEN UNIX_TIMESTAMP(ADDDATE(CURDATE(), INTERVAL 1-DAYOFWEEK(CURDATE()) DAY))
                              AND UNIX_TIMESTAMP(ADDDATE(CURDATE(), INTERVAL 7-DAYOFWEEK(CURDATE()) DAY))
  ) registered_user_count

这里是SQLFiddle演示

【讨论】:

  • WHERE user_last_login &gt; UNIX_TIMESTAMP(NOW() - INTERVAL 7 DAY) 也可以工作 sqlfidddle
  • @vladkras 你能解释一下你的提案如何帮助获得本周的第一天和最后几天吗???
  • @phpLover 有帮助吗?您的问题需要更多帮助吗?
【解决方案2】:
SELECT columnName
  SUM(CASE WHEN REQUESTMONTH=1 THEN (REQUESTTOTAL) END) Jan,
  SUM(CASE WHEN REQUESTMONTH=2 THEN (REQUESTTOTAL) END) Feb,
  SUM(CASE WHEN REQUESTMONTH=3 THEN (REQUESTTOTAL) END) Mar,
  SUM(CASE WHEN REQUESTMONTH=4 THEN (REQUESTTOTAL) END) Apr,
  SUM(CASE WHEN REQUESTMONTH=5 THEN (REQUESTTOTAL) END) May,
  SUM(CASE WHEN REQUESTMONTH=6 THEN (REQUESTTOTAL) END) Jun,
  SUM(CASE WHEN REQUESTMONTH=7 THEN (REQUESTTOTAL) END) July,
  SUM(CASE WHEN REQUESTMONTH=8 THEN (REQUESTTOTAL) END) Aug,
  SUM(CASE WHEN REQUESTMONTH=9 THEN (REQUESTTOTAL) END) Sep,
  SUM(CASE WHEN REQUESTMONTH=10 THEN (REQUESTTOTAL) END) 'Oct',
  SUM(CASE WHEN REQUESTMONTH=11 THEN (REQUESTTOTAL) END) Nov,
  SUM(CASE WHEN REQUESTMONTH=12 THEN (REQUESTTOTAL) END) 'Dec'
FROM tableName

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多