2016-12-29 39 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 

不過,我有一個變量$名稱,我想做出這樣一個行中得到的唯一插入通話數組,如果在計數期間$ 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

也可以將Mureinik的查詢與SUM結合使用,並且不使用COUNT結合CASE語句。 我認爲這個查詢更容易閱讀和理解,因爲查詢更加緊湊。

SELECT 
    total.Date 
, COUNT(*) AS total 
FROM 
    total 
GROUP BY 
    total.Date 
HAVING 
    SUM(total.Name = "John") 
相關問題