一個欄位匹配的sql語句書寫
新的一年開始了,首先向大家拜個年,祝大家過年好!
這幾天負責一個家教入口網站的開發,基於cakephp框架。在培訓機構表(schools)中存在一個欄位subject用來儲存另一個數據表(subjects)中記錄的id值,且儲存形式為:'1,2,3,4,5'。但是在應用高階搜尋過濾時頁面select選項option的傳值為subjects的id值,需要判斷查詢表schools中subject欄位存在此id,即查詢顯示此記錄。
先後嘗試了以下幾種方式:
**在此假設id傳值為3**
1. SELECT * FROM schools WHERE subject like '%3%';會出現查詢出存在'1,2,3','1,13,33'的記錄,不合邏輯.
2. SELECT * FROM schools WHERE subject in (3);會出現查詢出 '3',而不會查詢出存在 '1,3','1,2,3' 的記錄,不合邏輯
3. SELECT * FORM schools WHERE find_in_set('3', subject); 可以很好的解決了以上問題。
為了更深入的瞭解一下find_in_set()函式,mysql手冊中對此解釋如下:
FIND_IN_SET(str,strlist)
假如字串str 在由N 子鏈組成的字串列表strlist 中,則返回值的範圍在 1 到 N之間。一個字串列表就是一個由一些被‘,’符號分開的自鏈組成的字串。如果第一個引數是一個常數字符串,而第二個是type SET列,則 FIND_IN_SET() 函式被優化,使用位元計算。如果str不在strlist 或strlist 為空字串,則返回值為 0。如任意一個引數為NULL,則返回值為 NULL。 這個函式在第一個引數包含一個逗號(‘,’)時將無法正常執行。
