亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mysql案例之GROUP_CONCAT函數(shù)的具體使用

 更新時間:2025年05月29日 10:20:09   作者:灰小猿  
本文詳細的介紹了MySQL中學生與學科多對多關(guān)聯(lián)場景下的排序問題,通過GROUP_CONCAT函數(shù)結(jié)合左連接和分組,一次性獲取每個學生首個學科名稱并排序,感興趣的可以了解一下

今天這篇文章記錄一個最近開發(fā)中遇到的mysql實戰(zhàn)場景,覺得還挺典型的,就在此做一下記錄。

先看一下舉例場景:

mysql中學生表與學科表通過關(guān)聯(lián)表建立關(guān)聯(lián),學生和學科為多對多的關(guān)系,現(xiàn)要求查詢學生的數(shù)據(jù),并根據(jù)學生表引用的多個學科中名稱排列在前的學科的名稱進行排序,

數(shù)據(jù)庫表結(jié)構(gòu)如下:

CREATE DATABASE school;

USE school;

CREATE TABLE student (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50),
  age INT
);

CREATE TABLE course (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50),
  description VARCHAR(128)
);

CREATE TABLE student_subject_rel (
  id INT AUTO_INCREMENT PRIMARY KEY,
  student_id INT,
  course_id INT
);

數(shù)據(jù)如下:

先來分析一下需求:首先是要求查詢學生表中的數(shù)據(jù),那么學生表就是作為主表,同時要求對查詢結(jié)果進行排序,排序的要求是:以學生表中關(guān)聯(lián)的多條學科數(shù)據(jù)中,學科名稱排列在前的那個學科名稱為依據(jù)對學生數(shù)據(jù)進行排序,

舉個例子來說:

小王選了B課程和C課程

小李選了E課程和F課程

小張選了A課程和D課程

那么最終顯示的結(jié)果就是:小張、小王、小李

對于這種情況,我們一般想到的是先根據(jù)學生表和關(guān)聯(lián)表,找到每一個學生關(guān)聯(lián)的所有學科,然后對每一個學生的學科進行排序,取到排列在第一位的學科,之后再根據(jù)第一次排序得到的學科名對學生進行排序,上面這種邏輯固然能夠解決問題,但是使用不夠簡潔。

今天我們介紹一下另一種方法,采用GROUP_CONCAT 函數(shù)的方式來解決,只需要對學科完成一次排序即可。

首先我們來看一下GROUP_CONCAT 函數(shù)的含義:

GROUP_CONCAT函數(shù)

在 MySQL 中,GROUP_CONCAT 函數(shù)用于將查詢結(jié)果按指定順序連接成一個字符串。通常結(jié)合 GROUP BY 子句一起使用,可以將同一組的多個字段值連接成一個字符串。

以下是 GROUP_CONCAT 函數(shù)的基本語法:

SELECT GROUP_CONCAT(column_name ORDER BY order_column SEPARATOR ',') 
FROM table_name 
GROUP BY group_column;
  • column_name:要連接的字段名。

  • order_column:可選,用于指定連接時的排序順序。

  • SEPARATOR ',':可選,用于指定連接字符串之間的分隔符,默認為逗號(,)。

  • table_name:表名。

  • group_column:分組的字段名。

通過這樣的語法,我們可以在查詢中使用 GROUP_CONCAT 函數(shù)來將查詢結(jié)果按照指定順序連接成一個字符串。

下面使用GROUP_CONCAT 函數(shù)來解決上述場景問題:

首先以student表為主表,因為學生可能存在沒有選課的情況,所以在關(guān)聯(lián)表可能會存在沒有關(guān)聯(lián)數(shù)據(jù)的情況,但是這個時候?qū)W生數(shù)據(jù)也是應該要查詢出來的,所以這個時候就需要使用左連接的方式進行連表查詢,這樣即使學生沒有選課,仍然可以將學生的數(shù)據(jù)查詢出來。

因為如果一個學生選擇了多門課程的話,有可能會查出多條這個學生的數(shù)據(jù),所以這個時候就需要使用GROUP BY根據(jù)學生的ID對數(shù)據(jù)進行分組,

同時使用GROUP_CONCAT 函數(shù)將每一個學生選的課程名稱拼接成一個字符串作為一個外層排序的字段,并進行升序或降序排列。

最后的結(jié)果如下:

SELECT s.*, GROUP_CONCAT(c.name ORDER BY c.name) AS courses
FROM student s
LEFT JOIN student_course_rel r ON s.id = r.student_id 
LEFT JOIN course c ON c.id = r.course_id
GROUP BY s.id
ORDER BY GROUP_CONCAT(c.name ORDER BY c.name) ASC;

執(zhí)行結(jié)果:

如果想要在查詢的過程中加入一些其他限定條件,比如搜索等,即可使用如下寫法:

SELECT s.*, GROUP_CONCAT(c.name ORDER BY c.name) AS courses
FROM student s
LEFT JOIN student_course_rel r ON s.id = r.student_id 
LEFT JOIN course c ON c.id = r.course_id
WHERE s.name LIKE '%四%'
GROUP BY s.id
ORDER BY GROUP_CONCAT(c.name ORDER BY c.name) ASC; 

執(zhí)行結(jié)果如下:

好了,以上就是GROUP_CONCAT 函數(shù)在實戰(zhàn)中的一個使用場景總結(jié)記錄。

到此這篇關(guān)于Mysql案例之GROUP_CONCAT函數(shù)的具體使用的文章就介紹到這了,更多相關(guān)Mysql GROUP_CONCAT函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • CentOS中mysql cluster安裝部署教程

    CentOS中mysql cluster安裝部署教程

    這篇文章主要介紹了在CentOS 6.3系統(tǒng)上搭建MySQL Cluster 7.2.25集群的相關(guān)資料,需要的朋友可以參考下。
    2016-11-11
  • MySql使用mysqldump 導入與導出方法總結(jié)

    MySql使用mysqldump 導入與導出方法總結(jié)

    這篇文章主要介紹了MySql使用mysqldump 導入與導出方法總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • MySQL設置表自增步長的方法

    MySQL設置表自增步長的方法

    自增字段是一種常見且重要的功能,通常用于生成唯一的標識符,本文主要介紹了MySQL設置表自增步長的方法,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • mysql函數(shù)split功能實現(xiàn)

    mysql函數(shù)split功能實現(xiàn)

    mysql 5.* 的版本現(xiàn)在沒有split 函數(shù),但有些地方會用,在這里就簡單記錄一下
    2012-09-09
  • 體驗MySQL5.6.25并處理所遇到的問題

    體驗MySQL5.6.25并處理所遇到的問題

    本文給大家分享的是將mysql升級到5.6.25版本后所遇到的2個問題的處理解決辦法,有需要的小伙伴可以參考下。
    2015-07-07
  • MySQL主從同步機制與同步延時問題追查過程

    MySQL主從同步機制與同步延時問題追查過程

    這篇文章主要給大家介紹了關(guān)于MySQL主從同步機制與同步延時問題追查的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02
  • MySQL詳細匯總常用函數(shù)

    MySQL詳細匯總常用函數(shù)

    MySQL數(shù)據(jù)庫中提供了很豐富的函數(shù)。MySQL函數(shù)包括數(shù)學函數(shù)、字符串函數(shù)、日期和時間函數(shù)、條件判斷函數(shù)、系統(tǒng)信息函數(shù)、加密函數(shù)、格式化函數(shù)等。通過這些函數(shù),可以簡化用戶的操作。本期將帶你總結(jié)常用函數(shù)都有哪些
    2021-11-11
  • 更新text字段時出現(xiàn)Row size too large報錯應付措施

    更新text字段時出現(xiàn)Row size too large報錯應付措施

    個人建議:表的text字段很多建議建表時加上 row_format = dynamic當然,回過頭來MySQL的報錯也是有誤導性的,感興趣的你可以參考下本文
    2013-03-03
  • MySQL數(shù)據(jù)延遲跳動的問題解決

    MySQL數(shù)據(jù)延遲跳動的問題解決

    這篇文章主要介紹了MySQL數(shù)據(jù)延遲跳動的問題如何解決,幫助大家更好的理解和學習MySQL,感興趣的朋友可以了解下
    2020-08-08
  • Linux/Mac MySQL忘記密碼命令行修改密碼的方法

    Linux/Mac MySQL忘記密碼命令行修改密碼的方法

    這篇文章主要介紹了Linux/Mac MySQL忘記密碼命令行修改密碼的方法,需要的朋友可以參考下
    2017-05-05

最新評論