2011-04-30 77 views
2

我有以下數據:如何突出顯示包含重複數據的行?

+------+-------------------+--------------------+ 
| id |   number |    colour | 
+------+-------------------+--------------------+ 
| 1766 |    53 | red    | 
| 1767 |     3 | green    | 
| 1768 |    202 | green    | 
| 1769 |    52 | blue    | 
| 1770 |    56 | orange    | 
| 1771 |    90 | yellow    | 
| 1772 |    28 | teal    | 
| 1773 |    276 | purple    | 
| 1774 |    23 | black    | 
| 1775 |    23 | orange    | 
+------+-------------------+--------------------+ 

重要的colour列在這裏列。我想要顯示上述所有行(在HTML表格中),但我想突出顯示具有重複顏色的行。即兩個綠色行和兩個橙色行。

理想情況下,我最終會得到一個額外的列,其中包含一個布爾值(或者任何真正的值),我可以在顯示錶格時進行檢查。

回答

0

嗯,你不需要任何子查詢或任何東西,如果你沒有太多的數據。

就湊,你這樣顯示出來(您需要檢查的行或部分)每行:

$hashes = array(); 

while ($row = mysql_fetch_assoc($result)) { 
    $rowHash = md5(implode("", $row), true); 
    $isDuplicate = isset($hashes[$rowHash])); 
    <... printing row contents ...> 
    $hashes[$rowHash] = true; 
} 

該解決方案將工作,直到你有太多的行對頁面上的顯示。那麼你也可以在數據庫中緩存散列值。

0

這可能不是做最有效的方式,但你可以只算你看到當前顏色的次數:

SELECT id, number, colour, 
    (SELECT COUNT(*) FROM table WHERE colour = t.colour) AS repeats 
FROM table t 

Ofcourse,你只是想知道是否有1其他,所以你可以找到另外一行。

SELECT id, number, colour, 
    (SELECT id FROM table WHERE colour = t.colour AND id!=t.id LIMIT 1) AS repeats 
FROM table t 

我不能完全肯定,如果沒有第二行會發生什麼,所以你可能需要考慮NULL值,但我相信你得到的總體思路;)

+0

做這樣的子查詢有多昂貴? – Matthew 2011-04-30 09:12:46

+0

第二個不是很貴,雖然你每行都在做。查看'EXPLAIN'(只需在您查詢的前面添加單詞)輸出以查看發生了什麼。如果你想要這樣做,這取決於事物的大小。 – Nanne 2011-04-30 09:41:03

1

你可以這樣做一個join

SELECT `id`, `number`, `colour` FROM `table` 
INNER JOIN (SELECT COUNT(*) > 1 `duplicate` FROM `table` GROUP BY `colour`) `tmp` USING (`colour`); 
0

類似:

select table.id, table.number, table.colour, t.count 
from table 
join (select colour, count(colour) as c from table group by colour) as t 
on table.colour=t.colour 

會ÿ ield:

+------+-------------------+--------------------+-----------+ 
| id |   number |    colour |  count | 
+------+-------------------+--------------------+-----------+ 
| 1766 |    53 | red    |   1 | 
| 1767 |     3 | green    |   2 | 
| 1768 |    202 | green    |   2 | 
| 1769 |    52 | blue    |   1 | 
| 1770 |    56 | orange    |   2 | 
| 1771 |    90 | yellow    |   1 | 
| 1772 |    28 | teal    |   1 | 
| 1773 |    276 | purple    |   1 | 
| 1774 |    23 | black    |   1 | 
| 1775 |    23 | orange    |   2 | 
+------+-------------------+--------------------+-----------+ 
相關問題