Computer >> Máy Tính >  >> Lập trình >> MySQL

MySQL chọn các hàng riêng biệt thành một cột danh sách được phân tách bằng dấu phẩy?

Bạn có thể đạt được nó với sự trợ giúp của hàm GROUP_CONCAT (). Cú pháp như sau -

SELECT yourColumnName1,yourColumnName2,yourColumnName3,..N,
GROUP_CONCAT(yourColumnName4) as anyAliasName
FROM yourTableName
group by yourColumnName3, yourColumnName1,yourColumnName2;

Để hiểu cú pháp trên, chúng ta hãy tạo một bảng. Truy vấn để tạo bảng như sau -

mysql> create table CommaDelimitedList
   -> (
   -> Id int NOT NULL AUTO_INCREMENT,
   -> Name varchar(10),
   -> GroupId int,
   -> CompanyName varchar(15),
   -> RefId int,
   -> PRIMARY KEY(Id)
   -> );
Query OK, 0 rows affected (0.68 sec)

Chèn một số bản ghi trong bảng bằng lệnh INSERT. Truy vấn như sau -

mysql> insert into CommaDelimitedList(Name,GroupId,CompanyName,RefId)
   -> values('Larry',5,'Google',162);
Query OK, 1 row affected (0.14 sec)
mysql> insert into CommaDelimitedList(Name,GroupId,CompanyName,RefId)
   -> values('Larry',5,'Google',5);
Query OK, 1 row affected (0.48 sec)
mysql> insert into CommaDelimitedList(Name,GroupId,CompanyName,RefId)
   -> values('Larry',5,'Google',4);
Query OK, 1 row affected (0.16 sec)
mysql> insert into CommaDelimitedList(Name,GroupId,CompanyName,RefId)
   -> values('Sam',6,'Amazon',3);
Query OK, 1 row affected (0.31 sec)

Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select. Truy vấn như sau -

mysql> select *from CommaDelimitedList;

Sau đây là kết quả -

+----+-------+---------+-------------+-------+
| Id | Name  | GroupId | CompanyName | RefId |
+----+-------+---------+-------------+-------+
|  1 | Larry |       5 | Google      |   162 |
|  2 | Larry |       5 | Google      |     5 |
|  3 | Larry |       5 | Google      |     4 |
|  4 | Sam   |       6 | Amazon      |     3 |
+----+-------+---------+-------------+-------+
4 rows in set (0.00 sec)

Đây là truy vấn để thực hiện một danh sách cột được phân tách -

mysql> select Name,GroupId,CompanyName,
   -> group_concat(RefId) as RefList
   -> from CommaDelimitedList
   -> group by CompanyName, Name,GroupId;

Sau đây là kết quả -

+-------+---------+-------------+---------+
| Name  | GroupId | CompanyName | RefList |
+-------+---------+-------------+---------+
| Sam   |       6 | Amazon      | 3       |
| Larry |       5 | Google      | 162,5,4 |
+-------+---------+-------------+---------+
2 rows in set (0.00 sec)