0

我正在尝试进行查询以检查 clients 表并返回过去 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 组合查询,或者是否应该只进行三个不同的查询。有什么帮助吗?

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 回答