在MySQL中将单个换行符分隔值分隔为多个值

时间:2014-11-30 12:33:46

标签: php mysql

我有一个表,它将多个值放入MySQL的单个值中,由换行符分隔。像这样:

+------------+-------------+
|    Company | Products    |
|  (VARCHAR) | (TEXT)      |
+------------+-------------+
|  Acme Corp | Medicine    |
|            | Food        |
|            | Phones      |
+------------+-------------+
|  Ajax Corp | TVs         |
|            | Phones      |
|            | Pianos      |
+------------+-------------+

我对表格结构无能为力。现在我需要一个返回此表的查询:

+==========+
| Products |
+==========+
| Food     |
+----------+
| Medicine |
+----------+
| Phones   |
+----------+
| Pianos   |
+----------+
| TVs      |
+----------+

我更喜欢纯粹的MySQL方法,但使用PHP的解决方案也适合我。

2 个答案:

答案 0 :(得分:2)

使用MySQL分割字段没有方便的方法。 (查看MySQL documentation中的评论)。因此,最好的方法似乎是通过简单的方式获得所有产品记录:

SELECT Products FROM YourTable

在你的PHP代码之后:

$products = array_merge($products, explode("\n", $record));

每条记录。

答案 1 :(得分:1)

这将最多适用于3种产品,因为它需要更多的修补

CREATE TABLE t 
    (

     company varchar(20), 
     products text
    );
INSERT INTO t
VALUES
('Acme', 'Medicine,Food,Phones'),
('ajax', 'TVs,Phones,Pianos');  



SELECT SUBSTRING_INDEX(Products,',',1)  FROM t
UNION
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(Products,','),',',2),',',-1) FROM t
UNION
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(Products,','),',',3),',',-1) FROM t
WHERE SUBSTRING_INDEX(Products,',',1)<>''
AND SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(Products,','),',',2),',',-1) <>''
AND SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(Products,','),',',3),',',-1)<>''

结果

Medicine
TVs
Food
Phones
Pianos