0

client テーブルをチェックし、過去 30 日間、365 日間、および All Timeの特定の値を持つユーザー数を返すクエリを作成しようとしています。

すべての時間のカウントは簡単です:

$stmt = $conn->prepare("SELECT count(id) AS count FROM clients WHERE referred =  :refid");
$stmt->bindParam(':refid', $refid);
$stmt->execute();
$totalreferrals = $stmt->fetchAll();

テーブル:

id |   signup   | reffered |
----------------------------
2  | 2012-08-24 |   14     |
----------------------------
3  | 2011-10-13 |   14     |

UNION を使用してクエリを組み合わせることができるかどうか、または 3 つの異なるクエリを作成する必要があるかどうかはわかりません。何か助けはありますか?

4

2 に答える 2

6

行ではなく列でこれが必要だと思います

SELECT  COUNT(CASE WHEN DATEDIFF(CURDATE(),signup) <= 30 THEN id
                   ELSE NULL
              END) AS Last30days ,
        COUNT(CASE WHEN DATEDIFF(CURDATE(), signup) <= 365 THEN id
                   ELSE NULL
              END) AS Last365Days ,
        COUNT(*) AS Alltime
FROM    Table1
WHERE   reffered = 14

SQLFiddle http://sqlfiddle.com/#!2/6e6ce/2

于 2012-09-21T23:26:16.097 に答える
0

多分これは問題を解決するかもしれません:

SELECT count(id) AS count FROM clients WHERE referred = :refid AND BETWEEN ADDDATE(NOW(), INTERVAL -1 MONTH) AND NOW();

SELECT count(id) AS count FROM clients WHERE referred = :refid AND BETWEEN ADDDATE(NOW(), INTERVAL -1 YEAR) AND NOW();
于 2012-09-21T23:21:50.613 に答える