我有一个具有以下结构的表:
| animal | color |
|--------|-------|
| dog | black |
| dog | white |
| cat | white |
| dog | black |
| mouse | grey |
我现在想要得到每列的不同值。
正好:
SELECT DISTINCT animal, color from tab1
只会省略dog - black
的第二次出现:
| animal | color |
|--------|-------|
| dog | black |
| dog | white |
| cat | white |
| mouse | grey |
但我想要的是一些看起来如下的结构:
animal: dog, cat, mouse
color: black, white, grey
我的方法只是执行几个SELECT查询:
- SELECT DISTINCT animal from tab1
- SELECT DISTINCT color from tab1
然后将这些结果组合成一个带有PHP的数组。
但有没有更快的方法,也许只有一个查询?
答案 0 :(得分:6)
是的,您的第二种方法是正确的,但您可以使用SQL
:
SELECT DISTINCT `animal` from `tab1` UNION SELECT DISTINCT `color` from `tab1`
关于UNION的好处是,它已经过滤了你的价值观。所以,你可以摆脱DISTINCT
离开你:
SELECT `animal` from `tab1` UNION SELECT `color` from `tab1`
但在这种情况下,你将无法区分颜色和动物颜色。您可以添加分隔符SELECT
并使用它来区分。
答案 1 :(得分:0)
你可以用这个sql将它们分成两列:
SELECT animal, color FROM tab1 GROUP BY animal, color
编辑:
为了测试我的语句,我用这个SQL创建了一个mysql表:
CREATE TABLE
animals
(ID
int(11)NOT NULL AUTO_INCREMENT,
name
varchar(45)DEFAULT NULL,color
varchar(45)DEFAULT NULL,
PRIMARY KEY(ID
))ENGINE = InnoDB AUTO_INCREMENT = 5 DEFAULT CHARSET = UTF8;
我填充了这个值:
1只狗白
2只狗黑色
3只狗白
4只猫白
当我运行这个SQL时:“SELECT name,color FROM animals GROUP BY name,color”
我得到了这个结果:
猫白
狗黑色狗白
如果你想得到谁有重复你可以像这样运行SQL“SELECT名称,颜色,COUNT(ID)作为数字来自动物GROUP BY名称,颜色HAVING数字> 1”这给了我这个结果:
希望我能帮到你。狗白2