1

このクエリを使用して、2つの日付の間の訪問者数を返します。

$SQLVisit = "SELECT     
            count(score) as counts,
            date FROM persons  
            WHERE date > '".$_SESSION['data1']."' AND date < '".$_SESSION['data2]."' 
            GROUP BY date 
            ORDER BY date asc"; 

$result = mysql_query($SQLVisit);   
$num = mysql_num_rows($result); 

これらの訪問者は、男性と女性がいます。

訪問数と対応する日付を示す配列がすでにあります。このように:['2012-1-1'、50]。私のアイデアは、日付、訪問数、男性の数、女性の数を保持する配列を用意することでした。このように:['2012-1-1'、50、35.15]。

何か案が?ps:PHPを使用しています。

編集:配列のコード

$data[0] = array('day','counts');       
    for ($i=1; $i<($num+1); $i++)
    {
        $data[$i] = array(substr(mysql_result($result, $i-1, "date"), 0, 20),
            (int) mysql_result($result, $i-1, "counts"),);
    }   
    echo json_encode($data);

edit2:はい、性別(int)列があります。1つは男性用、2つは女性用です。

4

3 に答える 3

1

gender列がある場合は、試してください

$SQLVisit = "SELECT  date, gender,   
                     count(score) as counts,
            FROM  persons  
            WHERE date > '".$_SESSION['data1']."' AND date < '".$_SESSION['data2]."' 
            GROUP BY date, gender 
            ORDER BY date asc"; 

male性別を数字の代わりに書式設定する場合は、またはとして表示しますfemale

$SQLVisit = "SELECT  date, 
                     IF(gender = 1, 'Male', 'Female') gender,   
                     count(score) as counts,
            FROM  persons  
            WHERE date > '".$_SESSION['data1']."' AND date < '".$_SESSION['data2]."' 
            GROUP BY date, gender 
            ORDER BY date asc"; 

このようなフォーマットも必要な場合は、

date    Male      Female
===========================
'date'     5          6

次のクエリを使用します

SELECT  DATE,
        SUM(CASE WHEN gender = 1 then 1 ELSE 0 END) Male,
        SUM(CASE WHEN gender = 2 then 1 ELSE 0 END) Female
FROM    person
-- WHERE clause
GROUP BY DATE
-- ORDER clause

あなたのクエリは で脆弱です。SQL Injection以下の記事をお読みください

于 2012-11-20T14:12:18.650 に答える
1

SUM(IF()) を使用できます。

$SQLVisit = "SELECT     
            count(score) as counts,
            SUM(IF(gender=1,1,0)) as male,
            SUM(IF(gender=2,1,0)) as female,
            date FROM persons  
            WHERE date > '".$_SESSION['data1']."' AND date < '".$_SESSION['data2]."' 
            GROUP BY date 
            ORDER BY date asc"; 
于 2012-11-20T14:12:55.863 に答える
0

あなたはこれを行うことができます:

SELECT     
  SUM(CASE WHEN Gender = 1 THEN 1 ELSE 0) malescounts,
  SUM(CASE WHEN Gender = 2 THEN 1 ELSE 0) femalescounts,
  count(score) as counts
FROM persons  
WHERE date > ...
GROUP BY date;
于 2012-11-20T14:16:37.473 に答える