使用MySQL检查PHP中同一列中的值是否出现两次

时间:2013-11-16 04:22:20

标签: php mysql pdo

假设我有一张桌子:

id | name | city
------------------
1  | n1   | n1
2  | n2   | c2
3  | n3   | n3
4  | n4   | c4

我想检查列中的插槽中是否已存在值。

某些值可能会在不同的列中多次出现,但不得在同一列中出现两次。

例如,n1出现在name中,但也出现在city中,但我不希望它出现在名称或城市中两次。

使用PDO

2 个答案:

答案 0 :(得分:2)

您可以在按相同字段分组时使用计数:

 SELECT COUNT(`name`) as count_name FROM `cities` GROUP BY `name` HAVING count_name > 1

这将为您提供多次出现的名称列表。

如果要阻止它发生,请在名称字段上设置唯一约束,并在城市字段上设置唯一约束。您可以使用此SQL执行此操作:

ALTER TABLE cities ADD UNIQUE (name)
ALTER TABLE cities ADD UNIQUE (city)

答案 1 :(得分:0)

我有一个sql查询,它可以完美地满足你想要的结果:

SELECT * FROM (SELECT * FROM table1 GROUP BY name) AS t GROUP BY city ORDER BY id

GROUP BY是为了从列中获取ditinct值(我们在GROUP BY使用name两次cityAS t)和ORDER BY是定义派生表的别名,{{1}}用于排序(这是可选的)

以下是SQLFiddle演示