2013-04-18 14 views
0

我有一個數據庫,每次有人下載文件時都會存儲信息。它每次下載文件時都會捕獲姓名電子郵件和日期戳(按照客戶的要求)。PHP mysql在結果中加起來重複

我希望能夠連接到數據庫併合並所有重複條目。因此,如果電子郵件地址[email protected]有10個結果,它將打印「[email protected]; 10次下載」。

這是我到目前爲止嘗試過的。然而,它在頁面上超時:

function userFile($id) // $id = File ID 
{ 
    $order = "SELECT * FROM downloads WHERE dl_id='$id'"; 
    $result = mysql_query($order); 
    while($row=mysql_fetch_array($result)){  
     $email = $row['email']; 
     $order = "SELECT * FROM downloads WHERE email='$email'"; 
     $result = mysql_query($order); 
     $num_rows = mysql_num_rows($result); 
     print $row['email'] . ' ' . $num_rows; 
    } 
} 

必須有一個更容易或更好的方式來做到這一點。任何幫助表示讚賞!

+2

請不要在新代碼中使用'mysql_query',但是如果您必須,**總是** [正確地轉義您的SQL值](http://bobby-tables.com/php)。 – tadman

回答

1

有mysql做的工作適合你。如果我正確理解你的要求,你需要這樣的查詢:

SELECT email, COUNT(*) AS num_rows 
FROM downloads 
WHERE dl_id='$id' 
GROUP BY email 

然後你的PHP代碼會是這個樣子:

function userFile($id) // $id = File ID 
{ 
    $order = "SELECT email, COUNT(*) AS `num_rows` FROM downloads WHERE dl_id='$id' GROUP BY email"; 
    $result = mysql_query($order); 
    while($row=mysql_fetch_array($result)){  
     $email = $row['email']; 
     $num_rows = $row['num_rows']; 
     print $email . ' ' . $num_rows; 
    } 
} 

我今天沒有PHP可以在這裏找到,因此被警告這是未經測試的。

+0

這正是我正在尋找的!感謝您的快速回復!我仍然是相當新的MySQL,還沒有真正學到所有的東西呢!再次感謝! –

+0

@bwoebi - 謝謝,趕上!我如何接受你的編輯? –

+0

@EdGibbs我不知道有什麼方法可以加註編輯:P但是你可以提高我的回答(因爲它和你的答案差不多,沒什麼區別,但是我會有+10的聲望^^) – bwoebi

0

您應在COUNT之內使用GROUP BY

SELECT *,COUNT(1) FROM downloads WHERE `email`='$email' GROUP BY `email` 
2
function userFile ($id) // $id = File ID 
{ 
    $order = "SELECT COUNT(*) AS `count`, email FROM downloads WHERE dl_id='$id' GROUP BY email" 
    $result = mysql_query($order); 
    while($row = mysql_fetch_array($result)) { 
     print "{$row['email']}; {$row['count']} downloads.\n" 
}