2013-03-15 50 views
1

我有以下结构的表:合并MySQL的colums到行

+-----+------------+------------+------------+------------+ 
| ID | FEATURE1 | FEATURE2 | FEATURE3 | FEATURE4 | 
+-----+------------+------------+------------+------------+ 
| 1 | red  | blue  | black  | grey  | 
| 2 | yellow |   |   |   | 
| 3 | orange | red  | green  | golden | 
| 4 | orange | grey  | blue  |   | 

我想要做的就是查询表并返回所有可能的功能用在自动完成呼叫。我需要查询才能返回唯一值。

SELECT (FEATURE1, FEATURE2, FEATURE3, FEATURE4, FEATURE5) FEATURE 
FROM products 
WHERE `FEATURE` LIKE 'gr%\' 

我所需的输出是:

+----------+ 
| FEATURE | 
+----------+ 
| green | 
| grey | 
+0

CONCAT所有列,并与 'GR%' 进行过滤。 – 2013-03-15 14:49:29

+0

返回唯一值或不同值? – 2013-03-15 14:57:12

回答

4

基本上,你可以使用UNION所有列在一排相结合。

SELECT * 
FROM 
(
    SELECT FEATURE1 FEATURE FROM TableName 
    UNION 
    SELECT FEATURE2 FEATURE FROM TableName 
    UNION 
    SELECT FEATURE3 FEATURE FROM TableName 
    UNION 
    SELECT FEATURE4 FEATURE FROM TableName 
) sub 
WHERE FEATURE LIKE 'gr%' 
+0

谢谢,这是完美的作品。我有几个问题。我应该在FEATURE列上添加索引吗? – user2122889 2013-03-15 16:33:52

+0

不客气':D'它是什么? – 2013-03-15 16:34:29

+0

我应该在FEATURE列上添加索引吗? MYSQL如何知道选择DISTINCT值? 如果我希望此表保存大量记录,我是否应该真的创建一个单独的表来存储这些功能? – user2122889 2013-03-15 16:35:52