mysql findinset

我們在sql中經常會遇到模糊匹配,但是有的地方卻不能簡單的用like來區分。比如有個新聞表裏面有個type字段,他的存儲新聞類型,有 1頭條,2推薦....11娛樂,12熱點,13圖文...等等等等 現在有篇文章他既是 頭條,又是熱點,還是娛樂, type中以 2,12,11的格式存儲. 我們如何用sql查找所有type中有2推薦類別的文章呢。這裏我們就可以用到find_in_set函數。精確的匹配到我們想要的記錄。

find_in_set(str1,str2) 函數:返回str2中str1所在的位置索引,其中str2必須以","分割開。

工具/原料

  • mysql
  • find_in_set(str,list)

方法/步驟

  1. 1

    使用語法:

    select * form table where FIND_IN_SET(str,strlist)。

    mysql以","分隔的精確匹配方法
  2. 2

    舉個例子,首先建一個簡單的新聞表。

    mysql以","分隔的精確匹配方法
  3. 3

    錄入以下數據。

    mysql以","分隔的精確匹配方法
  4. 4

    現在我們想要獲取type爲2這種類型的新聞。如果用like的話不好實現。因爲12,2裏都包含了2.

    這裏我們得用find_in_set來查找:

    語句:

    select * from t_news where FIND_IN_SET(2,type);

    看結果,我們就可以看出很容易就找到了對應的記錄。

    mysql以","分隔的精確匹配方法
  5. 5

    如果用like的話,會找到錯誤的記錄(我們不想要的記錄)。可見這裏的find_in_set還是很有用的。

    mysql以","分隔的精確匹配方法
  6. 6

    find_in_set(str1,str2)還可以查找到str1所在str2中位置。

    同樣適用上面的例子數據。

    sql語句:

    select FIND_IN_SET(2,type) from t_news

    mysql以","分隔的精確匹配方法
  7. 7

    還可以適用find_in_set來強制排序。

    我們修改一下新聞表數據。

    如圖:

    mysql以","分隔的精確匹配方法
  8. 8

    現在我們有一個需求,需要根據type爲2,1,3這種順序排序。

    sql語句:

    select * from t_news order by find_in_set(type,'2,1,3');

    結果:

    mysql以","分隔的精確匹配方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章