2012-01-07 4 views
0

私は数日間、これだけの方法でMySQLを使用しています(MySQL + PHPではなく)クエリー。アイデアは、この、私のテーブル(ショートバージョン)です:MySQLクエリ(今週の合計訪問数)を使用して複雑なデータを取得

enter image description here

ユーザーがために(行が訪問のtimedateと訪問の種類を含めて、このテーブルに追加された私のサイトに来るときはいつでもこの特定の問題は、私はタイプ 'profile_visit'を必要とするだけです。私は現在の週に行​​われた総訪問数をチャートにフィードする必要があります

私はMon(2)Tue(0)のような配列を取得する必要があります。 )水曜日(1)など。あなたはMySQLのquerysを使ってこれを行うことができると思いますか?何か助けてくれてありがとう!

答えて

2
SELECT 
    COUNT(DAYOFWEEK(`datetime`) = 1 OR NULL) AS Sun, 
    COUNT(DAYOFWEEK(`datetime`) = 2 OR NULL) AS Mon, 
    COUNT(DAYOFWEEK(`datetime`) = 3 OR NULL) AS Tue, 
    COUNT(DAYOFWEEK(`datetime`) = 4 OR NULL) AS Wed, 
    COUNT(DAYOFWEEK(`datetime`) = 5 OR NULL) AS Thu, 
    COUNT(DAYOFWEEK(`datetime`) = 6 OR NULL) AS Fri, 
    COUNT(DAYOFWEEK(`datetime`) = 7 OR NULL) AS Sat 
FROM atable 
WHERE `type` = 'profile_visit' 
    AND `datetime` >= CURRENT_DATE() - INTERVAL (DAYOFWEEK(CURRENT_DATE()) - 1) DAY 
    AND `datetime` < CURRENT_DATE() + INTERVAL 1 DAY 

あなたも、私はそれがカウントについてですときCOUNTを使用する傾向があるが、それは単なる個人的な好みです

SUM(DAYOFWEEK(`datetime`) = 1) 

使用することができます。どちらの方法でも返される結果の点で違いはなく、パフォーマンスの面でもどちらでもないはずです。 COUNT表現の

OR NULL部分がここで説明されています


UPDATE

週間の月曜日から始まる上記の以下の同等のものを試してくださいスクリプト:

SELECT 
    COUNT(WEEKDAY(`datetime`) = 0 OR NULL) AS Mon, 
    COUNT(WEEKDAY(`datetime`) = 1 OR NULL) AS Tue, 
    COUNT(WEEKDAY(`datetime`) = 2 OR NULL) AS Wed, 
    COUNT(WEEKDAY(`datetime`) = 3 OR NULL) AS Thu, 
    COUNT(WEEKDAY(`datetime`) = 4 OR NULL) AS Fri, 
    COUNT(WEEKDAY(`datetime`) = 5 OR NULL) AS Sat, 
    COUNT(WEEKDAY(`datetime`) = 6 OR NULL) AS Sun 
FROM atable 
WHERE `type` = 'profile_visit' 
    AND `datetime` >= CURRENT_DATE() - INTERVAL (WEEKDAY(CURRENT_DATE())) DAY 
    AND `datetime` < CURRENT_DATE() + INTERVAL 1 DAY 

参考文献:

+0

完璧! – DomingoSL

+0

月曜日から始まる週を使用するようにクエリを変更することはできますか? – DomingoSL

+0

@DomingoSL:私の更新をご覧ください。 –

1

これは何ですか?あなたは探していますか?代わりに

COUNT(DAYOFWEEK(`datetime`) = 1 OR NULL) 

SELECT 
    SUM(CASE WHEN DAYOFWEEK(`datetime`) = 1 THEN 1 ELSE 0 END) AS `sunday_count`, 
    SUM(CASE WHEN DAYOFWEEK(`datetime`) = 2 THEN 1 ELSE 0 END) AS `monday_count`, 
    SUM(CASE WHEN DAYOFWEEK(`datetime`) = 3 THEN 1 ELSE 0 END) AS `tuesday_count`, 
    SUM(CASE WHEN DAYOFWEEK(`datetime`) = 4 THEN 1 ELSE 0 END) AS `wednesday_count`, 
    SUM(CASE WHEN DAYOFWEEK(`datetime`) = 5 THEN 1 ELSE 0 END) AS `thursday_count`, 
    SUM(CASE WHEN DAYOFWEEK(`datetime`) = 6 THEN 1 ELSE 0 END) AS `friday_count`, 
    SUM(CASE WHEN DAYOFWEEK(`datetime`) = 7 THEN 1 ELSE 0 END) AS `saturday_count` 

FROM 
    yourtable 
WHERE 
type = 'profile_visit' 
AND `datetime` BETWEEN '2012-01-01' AND '2012-01-08' 
関連する問題