mysql中FIND_IN_SET()和GROUP_CONCAT()的使用


知識點:mysql中FIND_IN_SET和GROUP_CONCAT()的使用

) 場景:當我們使用mysql數據庫,查詢一張的數據,其中的一列存放的是是另一張表id用“,”拼接的字符串

如下圖所示:

person表:

hobby表:

我們前端頁面想展示(把person表hobby一欄存放hobby表id字符串改成name連接的字符串):

) sql

這時我們可以使用mysql中的兩個函數FIND_IN_SET()和GROUP_CONCAT()

sql如下:

SELECT p.id, p.`name`,GROUP_CONCAT(h.`name`) as hobby from  person p
LEFT JOIN hobby h ON FIND_IN_SET(h.id,p.hobby)
GROUP BY p.id

)那 mysql中FIND_IN_SET()和GROUP_CONCAT() 分別是什么意思呢?

(1)FIND_IN_SET()

  語法: FIND_IN_SET(str,strlist)

  定義: (1)如果字符串str在由N子鏈組成的字符串列表中,則返回值范圍在1-N之間

   如:select FIND_IN_SET('c','a,b,c,d') 返回值為 3

               (2)如果str不在strlist中或者strlist為空字符串,則返回值為 0

   如:select FIND_IN_SET('e','a,b,c,d') 返回值為 0

          select FIND_IN_SET('e','') 返回值為 0

                (3)如果任意一個參數為NULL,返回NULL

   如:select FIND_IN_SET('e',NULL),返回值為NULL

   使用:在下面表中,如果我們想查詢人員愛好彈琴的所有人員的話,該怎么查詢呢?

 

 

我們可以這樣寫sql:

SELECT * from
(SELECT p.id, p.`name`,GROUP_CONCAT(h.`name`) as hobby from  person p
LEFT JOIN hobby h ON FIND_IN_SET(h.id,p.hobby)
GROUP BY p.id) person1
WHERE FIND_IN_SET("彈琴",hobby)

查詢結果:

補充使用 in的話,場景不適用

(2)GROUP_CONCAT()

語法:group_concat( [distinct] 要連接的字段 [order by 排序字段 asc/desc] [separator '分隔符'])

功能:將group by產生的同一分組中的值連接起來,返回一個字符串結果

例如 a.表 person1 數據如下:查詢相同愛好的所有人的名字

 sql:

  SELECT GROUP_CONCAT(name),hobby from person1 GROUP BY hobby

查詢結果:

   b.查詢相同愛好的人員的id,按照從大到小,用“_”拼接

sql:

  SELECT GROUP_CONCAT(id order by id desc separator '_' ),hobby from person1 GROUP BY hobby

查詢結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM