2012-02-24 39 views
1

我發現有關刪除重複項和計算重複項的問題,但是我一直無法將重複計數添加到MySQL行,所以我提出了這個問題。這是我到目前爲止:如何輸出MySQL表的所有行幷包含用於計數重複項的列?

$query = "SELECT * FROM Losers ORDER BY Date DESC"; 
$result = mysql_query($query) or die(mysql_error()); 
echo '<table>'; 
while($row = mysql_fetch_array($result)){ 
    echo '<tr><td>' . $row['Name']. "</td><td>". date("l, M j, Y",strtotime($row['Date'])) . '</td></tr>'; 
} 
echo '</table>'; 
mysql_close($con); 

現在我想在每個行的名稱中包含重複的計數。因此,它會讀這樣的事情:

Ben 2 
Laura 3 
Amy 1 
Laura 3 
Ben 2 
Laura 3 

我找到了這個查詢在名稱組重複數數看:

$newQuery = "SELECT Name, Date, COUNT(Name) FROM Losers GROUP BY Name"; 

但隨後將輸出:

Ben 2 
Laura 3 
Amy 1 

我如何合併這兩個查詢?

回答

4

據我所知,你不能這樣做,沒有一個子查詢:

SELECT Losers.*, (SELECT COUNT(*) FROM Losers AS Sub WHERE Sub.Name = Losers.Name) AS `count` FROM Losers ORDER BY Date DESC 

但個人而言,我寧願用兩個單獨的查詢來代替。

編輯:看到下面的兩個答案,他們好多了。

+0

作爲「失敗者」表中的條目的函數,這將呈指數級緩慢。 – Mikhail 2012-02-24 16:30:14

+0

不要吹牛,但我的答案或巴斯蒂的更好,因爲子查詢將只運行一次;) – tedders 2012-02-24 18:55:07

+0

你說得對。事實上,我甚至不知道JOIN(SELECT ...)是一個有效的語句。愚蠢的我 ) – 2012-02-24 20:27:18

-1

使用SQL

SELECT field 1, field 2, field 3, COUNT(*) 
FROM table 
GROUP BY field 1, field 2, field 3 

這SQL會給你所有不同行,與#的輸出時間他們出現

+0

而這正是他所做的和不想擁有的。 – Basti 2012-02-24 15:10:39

3

最簡單的方法可能是將查詢與GROUP BY子句一起使用,並將其用作加入原始表的子查詢。

I.E.

SELECT L.*, Loser_Count.count 
FROM Losers L 
JOIN (SELECT loser_id, COUNT(Name) count FROM Losers GROUP BY Name) Loser_Count ON 
    L.loser_id = Loser_Count.loser_id 
ORDER BY L.date DESC 

這應該有效,但如果SQL天才以更有效的方式回來,我不會感到驚訝。希望這可以幫助!

4
SELECT Losers.Name, Losers.Date, L.Count 
FROM Losers 
JOIN (
    SELECT Name, COUNT(Name) AS Count 
    FROM Losers 
    GROUP BY Name 
) AS L ON Losers.Name = L.Name 
1

我會做兩個單獨查詢:

SELECT Name, COUNT(*) FROM Losers GROUP BY Name 
/* Parse this to have a php array $l_count in form ("Ben" => 2, "Laura" => 3) */ 
SELECT Name FROM Losers 

while ($name = mysql_fetch...) { 
    print $name.' '.$l_count[$name]."\n"; 
} 

祝你好運!

相關問題