我的mySQL数据库有200万行以下。数据库是非交互式的,因此效率不是关键。
我所拥有的(简化)结构是:
`id` int(11) NOT NULL auto_increment
`category` varchar(64) NOT NULL
`productListing` varchar(256) NOT NULL
现在我想解决的问题是,我想在productListing字段上找到重复项,将category字段上的数据合并为一个结果 - 删除重复项。
所以给出以下数据:
+----+-----------+---------------------------+
| id | category | productListing |
+----+-----------+---------------------------+
| 1 | Category1 | productGroup1 |
| 2 | Category2 | productGroup1 |
| 3 | Category3 | anotherGroup9 |
+----+-----------+---------------------------+
我最终想要的是:
+----+----------------------+---------------------------+
| id | category | productListing |
+----+----------------------+---------------------------+
| 1 | Category1,Category2 | productGroup1 |
| 3 | Category3 | anotherGroup9 |
+----+----------------------+---------------------------+
在纯mySQL查询或php中,最有效的方法是什么?
答案 0 :(得分:2)
我认为您正在寻找GROUP_CONCAT
:
SELECT GROUP_CONCAT(category), productListing
FROM YourTable
GROUP BY productListing
我会创建一个新表,插入更新的值,删除旧表并将新表重命名为旧表:
CREATE TABLE new_YourTable SELECT GROUP_CONCAT(...;
DROP TABLE YourTable;
RENAME TABLE new_YourTable TO YourTable;
-- don't forget to add triggers, indexes, foreign keys, etc. to new table
答案 1 :(得分:0)
SELECT MIN(id), GROUP_CONCAT(category SEPARATOR ',' ORDER BY id), productListing
FROM mytable
GROUP BY
productListing