我有一个问题。
我有这个MySQL表:
id | name | subid
1 | Joe | 5
2 | Carl | 6
3 | Bob | 7
4 | Joe | 8
5 | Carl | 9
我希望像这样合并:
id | name | subids
1 | Joe | 5,8
2 | Carl | 6,9
3 | Bob | 7
这可能吗? 我有一个真正的大数据库,如果我用PHP-Cronjob做这个,它需要几个星期......
答案 0 :(得分:0)
您正在寻找group_concat()
:
select min(id) as id, name, group_concat(subid) as subids
from table t
group by name;
答案 1 :(得分:0)
GROUP BY
和GROUP_CONCAT
绝对可以合并行。然而,这将取代另一个问题,甚至可能是更大的问题。如果有的话,你应该拆分表,而不是合并它。
创建两个表 - 一个用于用户,另一个用于用户子ID。填充这两个将非常容易,最终你会有一个很好的规范化模式。
CREATE TABLE USER_SUBID (USER_ID int, SUBID int);
CREATE TABLE NEW_USER (ID int, NAME varchar(20));
INSERT INTO NEW_USER (ID, NAME)
SELECT MIN(Id) as ID, NAME
FROM OLD_USERS
GROUP BY NAME
INSERT INTO USER_SUBID (USER_ID, SUBID)
SELECT MIN(Id) as USER_ID, SUBID
FROM OLD_USERS
GROUP BY NAME, SUBID
这将使两个表的数据如下:
NEW_USER:
ID Name
-- ----
1 Joe
2 Carl
3 Bob
USER_SUBID:
USER_ID SUBID
------- -----
1 5
1 8
2 6
2 9
3 7