0

過去7日間に登録ユーザーを取得しようとしているので、ユーザーテーブルがあります

+-----+------------+--------------+
| ID  | USERNAME   | ADDED        |
+-----+------------+--------------+
|  1  | Vlad       | 1347386878   |
+-----+------------+--------------+
|  2  | Test       | 1347386578   |
+-----+------------+--------------+

以下のSQLを試しましたが、出力は空で、エラーはありません...そして、今日から7日前までの何かが必要です

SELECT date(added), COUNT(id) AS num_registered 
FROM users 
WHERE added < CURDATE() 
AND added > CURDATE() - INTERVAL 7 DAYS 
GROUP BY date(added) LIMIT 1, 7

これを行う方法について何か提案はありますか?

編集:

$mysql_query = mysql_query('SELECT added, DATE(added), COUNT(id) AS num_reg FROM users_test WHERE added < (UNIX_TIMESTAMP() - (7 * 24 * 60 * 60)) GROUP BY DATE(added) LIMIT 1, 7') or die(mysql_error());
while($row = mysql_fetch_array($mysql_query))
{
    $month = date('F', $row['added']);
    $day = date('j', $row['added']);
    $textbuilder .= '
    <li>
        <a href="#" title="'.$month.' '.$day.', '.$row['num_reg'].' registered">
            <span class="label">'.$day.'</span>
            <span class="count" style="height: 20%">('.$row['num_reg'].')</span>
        </a>
    </li>';
}

テーブル:

CREATE TABLE IF NOT EXISTS `users_test` (
  `id` int(10) NOT NULL,
  `username` varchar(60) NOT NULL,
  `added` int(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `users_test` (`id`, `username`, `added`) VALUES
(1, 'Test', 1347303641),
(2, 'Test1', 1347217241),
(3, 'Test2', 1347130841),
(4, 'Test3', 1347044441);
4

3 に答える 3

3

ADDEDは UNIX タイムスタンプ値なので、次のようにします。

SELECT
    DATE(Added), Count()
FROM
    Users
WHERE
    Added > ( UNIX_TIMESTAMP() - ( 7 * 24 * 60 * 60 ) )
GROUP BY
    DATE(Added)
LIMIT
    1, 7

これは、うるう秒を扱っている場合には機能しないことに注意してください。これは、1 日のおおよその定義を として使用しているため24*60*60です。

于 2012-09-11T18:22:41.727 に答える
0

datetimeタイムスタンプをusingに変換する必要がありますFROM_UNIXTIME()。大量の変換が行われるため、派生テーブルを操作する方が簡単です。

SELECT DATE(Added), COUNT(id) AS num_registered FROM
    (SELECT id, username, FROM_UNIXTIME(added) AS added FROM users) u
WHERE added < CURDATE()
    AND added > CURDATE() - INTERVAL 7 DAYS
GROUP BY DATE(added) LIMIT 1, 7
于 2012-09-11T18:21:37.877 に答える
0
SELECT FROM_UNIXTIMESTAMP(added, ,  '%b %D, %Y'), COUNT(id) AS num_registered 
FROM users 
WHERE added > unix_timestamp() - ( 7 - 86400 )
GROUP BY FROM_UNIXTIMESTAMP(added, ,  '%b %D, %Y')
于 2012-09-11T19:17:43.630 に答える