结合多个不同的值

时间:2016-11-25 13:52:34

标签: php mysql sql

我有一个具有以下结构的表:

| 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的数组。

但有没有更快的方法,也许只有一个查询?

2 个答案:

答案 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 animalsID 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

希望我能帮到你。