mysql拆分字符串作為查詢條件的示例代碼

 更新時間:2022年07月06日 08:25:01   作者:Jame!  
本文主要介紹了mysql拆分字符串作為查詢條件的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

有個群友問一個問題

這表的ancestors列存放的是所有的祖先節點,以,分隔

例如我查詢dept_id為103的所有祖先節點,現在我只有一個dept_id該怎么查

然后我去網上找到這樣一個神奇的sql,改改表名就成了下面的這樣

	SELECT
		substring_index( substring_index( a.ancestors, ',', b.help_topic_id + 1 ), ',',- 1 ) AS shareholder 
	FROM
		sys_dept a
		JOIN mysql.help_topic b ON b.help_topic_id < ( length( a.ancestors ) - length( REPLACE ( a.ancestors, ',', '' ) ) + 1 ) 
	WHERE
	dept_id = 103 

嗯,沒錯結果出來了,然后我就很好奇,什么原理,一個個來看

mysql.help_topic

這個是一個mysql自帶的幫助解釋注釋表,查詢結果如下

id從0開始,我這個版本最大id到584,版本不同應該id最大值也不一樣,這個表的作用一會說

REPLACE

這個函數應該都知道吧,替換字符用的

LENGHT

獲取字符串的長度

substring_index

查分字符串,三個參數,要拆分的字符串,根據拆分的字符,從第幾個開始

如果最后的那個參數為正數則從左開始數,然后獲取對應下標左邊的所有字符

如果為負數,則從右邊開始數,獲取對應下標右邊的所有字符串,這個就不演示了

分析

先來看第一段

( length( a.ancestors ) - length( REPLACE ( a.ancestors, ',', '' ) ) + 1 )

我們假設當前數據的ancestors值為 0,100,101 那么第一個length(a.ancestors)的值就是9 減去后面的一段

length( REPLACE ( a.ancestors, ',', '' ) ) 因為我們假設的值里面有兩個 , 所以length為7 最后在加1 那么這段值為 3

和前面的 join on條件能查出的數據也就是mysql.help_topic這個表中所有id小于3的數據,也就是id為0,1,2的三條數據

那么現在先來看看這樣查詢的結果是啥

那么我們假設現在是第一行,mysql.help_topic表中的help_topic_id為0

substring_index( substring_index( a.ancestors, ',', b.help_topic_id + 1 ), ',',- 1 )

最里面的substring_index 拆分后為0,因為沒有能在拆分的了所以外面的substring_index返回的也是0

第二行help_topic_id為1的時候獲取結果為0,100

然后執行外層的substring_index 根據,拆分,值為-1 所以從右邊找一位,獲取的值就是100

第三行結果為0,100,101,外層substring_index 執行后結果為101

....只能心中大喊牛逼

那么現在知道mysql.help_topic這個表的作用了嗎?就是用來對拆分出的數據分行,專業點叫笛卡爾積 (真的不懂..)

這種方法也有缺點:就是拆出的行數不能大于mysql.help_topic這個表的數據條數

到此這篇關于mysql拆分字符串作為查詢條件的示例代碼的文章就介紹到這了,更多相關mysql拆分字符串查詢內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • phpstudy無法啟動MySQL服務的完美解決辦法

    phpstudy無法啟動MySQL服務的完美解決辦法

    學習php當然是要先安裝好運行環境了,phpstyudy是一個運行php的集成環境,一鍵安裝對新手很友好,下面這篇文章主要給大家介紹了關于phpstudy無法啟動MySQL服務的完美解決辦法,需要的朋友可以參考下
    2022-06-06
  • MySQL錯誤代碼大全

    MySQL錯誤代碼大全

    本章列出了當你用任何主機語言調用MySQL時可能出現的錯誤。首先列出了服務器錯誤消息。其次列出了客戶端程序消息
    2014-01-01
  • mysql?explain中key_len的含義以及計算方法

    mysql?explain中key_len的含義以及計算方法

    通常在優化SQL查詢的時候,我們都會使用explain分析SQL執行計劃,下面這篇文章主要給大家介紹了關于mysql?explain中key_len的含義以及計算方法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • 詳解mysql解壓縮版安裝步驟

    詳解mysql解壓縮版安裝步驟

    這篇文章主要介紹了mysql解壓縮版安裝步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • MySQL異?;謴椭疅o主鍵情況下innodb數據恢復的方法

    MySQL異?;謴椭疅o主鍵情況下innodb數據恢復的方法

    這篇文章主要介紹了MySQL異?;謴椭疅o主鍵情況下innodb數據恢復的方法,結合實例形式分析了針對innodb引擎無主鍵的情況下恢復數據的步驟與相關技巧,需要的朋友可以參考下
    2016-04-04
  • RHEL6.5編譯安裝MySQL5.6.26教程

    RHEL6.5編譯安裝MySQL5.6.26教程

    這篇文章主要介紹了RHEL6.5編譯安裝MySQL5.6.26教程的相關資料,需要的朋友可以參考下
    2015-10-10
  • 基于MySQL在磁盤上存儲NULL值

    基于MySQL在磁盤上存儲NULL值

    這篇文章主要介紹了基于MySQL在磁盤上存儲NULL值,NULL值列表,一行數據里可能有的字段值是NULL,比如nickname字段,允許為NULL,存儲時,如果沒賦值,這字段值就是NULL,下文關于NULL值的相關資料,需要的小伙伴可以參考一下
    2022-02-02
  • 一文教你快速生成MySQL數據庫關系圖

    一文教你快速生成MySQL數據庫關系圖

    我們經常會用到一些表的數據庫關系圖,下面這篇文章主要給大家介紹了關于生成MySQL數據庫關系圖的相關資料,文中通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • mysql存儲emoji表情步驟詳解

    mysql存儲emoji表情步驟詳解

    在本篇內容中小編給大家整理了關于mysql存儲emoji表情的詳細步驟以及知識點,需要的朋友們學習下。
    2019-03-03
  • 詳解MySQL索引原理以及優化

    詳解MySQL索引原理以及優化

    在本篇文章中小編給大家整理了關于MySQL索引原理以及優化的相關知識點以及實例代碼,需要的朋友們參考下。
    2019-06-06

最新評論

美丽人妻被按摩中出中文字幕