使用GROUP CONCAT語法

2021-08-30 00:17:44 字數 2242 閱讀 2182

語法:

group_concat([distinct] expr [,expr ...][order by [asc | desc] [,col_name ...]][separator str_val])

下面演示一下這個函式,先建立乙個學生選課表student_courses,並填充一些測試資料。

sql**

create table student_courses (

student_id int unsigned not null,

courses_id int unsigned not null,

key(student_id)

); insert into student_courses values (1, 1), (1, 2), (2, 3), (2, 4), (2, 5);

若要查詢學生id為2所選的課程,則使用下面這條sql:

mysql> select student_id, courses_id from student_courses where student_id=2;

+------------+------------+

| student_id | courses_id |

+------------+------------+

| 2 | 3 |

| 2 | 4 |

| 2 | 5 |

+------------+------------+

3 rows in set (0.00 sec)

輸出結果有3條記錄,說明學生id為2的學生選了3、4、5這3門課程。

放在php裡,必須用乙個迴圈才能取到這3條記錄,如下所示:

php**

foreach ($pdo->query("select student_id, courses_id from student_courses where student_id=2") as $row)

而如果採用group_concat()函式和group by語句就顯得非常簡單了,如下所示:

sql**

mysql> select student_id, group_concat(courses_id) as courses from student_courses where student_id=2 group by student_id; 

+------------+---------+

| student_id | courses |

+------------+---------+

| 2 | 3,4,5 |

+------------+---------+

1 row in set (0.00 sec)

這樣php裡處理就簡單了:

php**

$row = $pdo->query("select student_id, group_concat(courses_id) as courses from student_courses where student_id=2 group by student_id"); 

$result = explode(',', $row['courses']);

分隔符還可以自定義,預設是以「,」作為分隔符,若要改為「|||」,則使用separator來指定,例如:

sql**

select student_id, group_concat(courses_id separator '|||') as courses from student_courses where student_id=2 group by student_id;

除此之外,還可以對這個組的值來進行排序再連線成字串,例如按courses_id降序來排:

sql**

select student_id, group_concat(courses_id order by courses_id desc) as courses from student_courses where student_id=2 group by student_id;

MySQL使用記錄 group concat

mysql中的group concat create table film id int primary keyauto increment name varchar 128 score float 插入資料 insert into film name,score values 霸王別姬 9.5 校...

使用group concat出現的問題

今天在使用group concat拼接字串時,遇到乙個問題,就是select的結果是沒有資料的,但使用group concat就出現一條空資料。select group concat studentid as studentid from student where studentid 123123...

group concat 函式總結

group concat 手冊上說明 該函式返回帶有來自乙個組的連線的非null值的字串結果。比較抽象,難以理解。通俗點理解,其實是這樣的 group concat 會計算哪些行屬於同一組,將屬於同一組的列顯示出來。要返回哪些列,由函 數引數 就是欄位名 決定。分組必須有個標準,就是根據group ...