我有一个表,它将多个值放入MySQL的单个值中,由换行符分隔。像这样:
+------------+-------------+
| Company | Products |
| (VARCHAR) | (TEXT) |
+------------+-------------+
| Acme Corp | Medicine |
| | Food |
| | Phones |
+------------+-------------+
| Ajax Corp | TVs |
| | Phones |
| | Pianos |
+------------+-------------+
我对表格结构无能为力。现在我需要一个返回此表的查询:
+==========+
| Products |
+==========+
| Food |
+----------+
| Medicine |
+----------+
| Phones |
+----------+
| Pianos |
+----------+
| TVs |
+----------+
我更喜欢纯粹的MySQL方法,但使用PHP的解决方案也适合我。
答案 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