SELECT GROUP_CONCAT(s.pageviews) AS pageviews
FROM
(
SELECT COUNT(*) AS pageviews
FROM stats_hits
WHERE pageID='1' AND entrytime>DATE_SUB(now(), INTERVAL 5 DAY)
GROUP BY DATE(`entrytime`) LIMIT 5
) s;
參見:http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html#function_group-concat
如果你想永遠有5個結果,這樣的事情醜陋的黑客攻擊可能會奏效。
SELECT GROUP_CONCAT(s2.pageviews) AS pageviews
FROM
(
SELECT * FROM
(
SELECT COUNT(*) AS pageviews
FROM stats_hits
WHERE pageID='1' AND entrytime>DATE_SUB(now(), INTERVAL 5 DAY)
GROUP BY DATE(`entrytime`) LIMIT 5
UNION ALL SELECT 0 AS pageviews
UNION ALL SELECT 0 AS pageviews
UNION ALL SELECT 0 AS pageviews
UNION ALL SELECT 0 AS pageviews
UNION ALL SELECT 0 AS pageviews
) s1
ORDER BY pageviews = 0 ASC
LIMIT 5) s2;
另一種選擇是這
CREATE TEMPORARY TABLE temp_table LIKE SELECT 0 as pageviews;
INSERT INTO temp_table VALUES (0),(0),(0),....,(0);
INSERT INTO temp_table
SELECT COUNT(*) AS pageviews
FROM stats_hits
WHERE pageID='1' AND entrytime>DATE_SUB(now(), INTERVAL x DAY)
GROUP BY DATE(`entrytime`) LIMIT x; //replace x with the number of days
SELECT GROUP_CONCAT(t.pageviews) AS pageviews
FROM temp_table t
ORDER BY t.pageview = 0 ASC
LIMIT x; //replace x with the number of days
感謝約翰 - 漂亮的快速和骯髒的支點技術。我會記住這一點!我有時不得不查看最近的30或60天,以免上面的黑客無法正常工作。而且它看起來並不像保持結果的順序,我可能也需要。無論如何,非常感謝幫助。 – cronoklee 2011-05-08 15:53:53
@cronoklee,'group by'按'entrytime'排序結果。中間子查詢中的'order by'不會改變這個順序,不過你可以在內部或外部選擇中添加'order by'。 – Johan 2011-05-08 16:01:25
哇看起來很棒 - 謝謝@約翰。我假設在'VALUES(0),(0),(0),...,(0);'我需要添加一個(0)我每天要計數? – cronoklee 2011-05-08 16:21:00