2016-12-29 4 views
1

に発生した場合にのみ、私は、次の列を持つテーブルJTを持っている:のMySQL - 等しい値を持つ行の数を数えるが、名前が他の列

Id | Name | Date  
1 | John | 2015-01-01 
2 | Alex | 2016-01-01 
3 | Pete | 2016-01-01 
4 | Alex | 2016-08-08  
5 | John | 2016-08-08 

私は同じ日に行数をカウントします。帰国正常に動作します

$query_21="SELECT Date, COUNT(*) AS total FROM JT GROUP BY Date"; 
$result_21=mysql_query($query_21); 

while($row = mysql_fetch_array($result_21)) { 

    echo $row['Date'] . ":"; 
    echo $row['total'] . "<br>";  
} 

:私はすることでこれを行っているが

2015-01-01: 1 

2016-01-01: 2 

2016-08-08: 2 

、私は変数$名を持っている、と私は、行のみ結果に挿入されたコールを作りたいです配列中の行の1つに$ Nameが含まれている場合は配列。だから、$名=「ジョン」は、それが返す必要がある場合:

2015-01-01: 1 

2016-08-08: 2 

答えて

1

をこれがexists条件を使用してwhere句で行うことができますが、とにかく、グループ化しているので、私はhaving句を使用すると、よりエレガントかもしれないと思います:

SELECT Date, COUNT(*) AS total 
FROM  jt 
GROUP BY Date 
HAVING (COUNT(CASE name WHEN $name THEN name END) > 0) 

注:
$nameは、当然のことながら、プリペアドステートメントにバインドされた変数でなければなりません。

+1

ありがとう;-) – Mamun

0

SUMでMureinikのクエリを使用し、CASE文と組み合わせてCOUNTを使用することもできません。 このクエリは、よりコンパクトであるため、読みやすく理解しやすいと思います。

SELECT 
    total.Date 
, COUNT(*) AS total 
FROM 
    total 
GROUP BY 
    total.Date 
HAVING 
    SUM(total.Name = "John") 
関連する問題