我有以下数据:
+------+-------------------+--------------------+
| 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 :(得分:1)
你可以做join:
SELECT `id`, `number`, `colour` FROM `table`
INNER JOIN (SELECT COUNT(*) > 1 `duplicate` FROM `table` GROUP BY `colour`) `tmp` USING (`colour`);
答案 1 :(得分:0)
这可能不是最有效的方法,但你可以计算你看到当前颜色的次数:
SELECT id, number, colour,
(SELECT COUNT(*) FROM table WHERE colour = t.colour) AS repeats
FROM table t
当然,你只想知道是否有另外一个,所以你可以去寻找另外一行。
SELECT id, number, colour,
(SELECT id FROM table WHERE colour = t.colour AND id!=t.id LIMIT 1) AS repeats
FROM table t
我不完全确定如果没有第二行会发生什么,所以你可能需要在那里考虑NULL值,但我认为你得到了一般的想法;)
答案 2 :(得分: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
会产生:
+------+-------------------+--------------------+-----------+
| 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 |
+------+-------------------+--------------------+-----------+
答案 3 :(得分:0)
嗯,如果您没有太多数据,不需要任何子查询或任何内容。
只需散列每行(或您需要检查的行的一部分),就像显示它们一样:
$hashes = array();
while ($row = mysql_fetch_assoc($result)) {
$rowHash = md5(implode("", $row), true);
$isDuplicate = isset($hashes[$rowHash]));
<... printing row contents ...>
$hashes[$rowHash] = true;
}
此解决方案将一直有效,直到您有太多行显示在页面上。然后,您还可以在数据库中缓存哈希值。