乙個字段匹配的sql語句書寫

2021-08-30 12:06:29 字數 871 閱讀 7091

新的一年開始了,首先向大家拜個年,祝大家過年好!

這幾天負責乙個家教門戶**的開發,基於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。 這個函式在第乙個引數包含乙個逗號(『,』)時將無法正常執行。

mysql多表乙個字段

先執行這三個 show variables like group concat max len 查詢大小 set global group concat max len 10240000 設定大小滿足執行後能夠存放所有的插入語句 set session group concat max len 10...

mysql乙個欄位為空時使用另乙個字段排序

表中有兩個日期欄位createdate,updatedate。其中updatedate可以為空,要求使用updatedate排序,如果updatedate為空則使用createdate排序,結果要順序排下來。按照常規方法 這樣的結果是為空的資料排在了最下面,不符合要求。這樣試試 這樣排的結果是先按u...

mybati查詢乙個字段出現的是另乙個欄位的值

使用mybatis的時候,查詢列表進行展示,joint bank number欄位總是為空 但是area欄位是沒有資料的,確有資料,很奇怪 最後我只查詢joint bank number欄位,發現,除了area欄位,所有的字段都是空,但是我查的是joint bank number欄位啊,然後我就在考...