找到mySQL重复项,然后合并数据

时间:2010-05-24 11:21:26

标签: php mysql

我的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中,最有效的方法是什么?

2 个答案:

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