MySQL FIND_IN_SET函數查詢筆記

Mysql查詢時,查詢某個字段是否包含某個值的記錄:mysql

Table Asql

id   type
1    12,23函數

2    12,44post

須要查詢A表中type字段含12的記錄,可使用like模糊查詢,可是會查詢到一些咱們不須要的記錄。type字段是以英文逗號分割,可使用mysql的find_in_set函數:
spa

select  *  from  A  where find_in_set(12, type) > 0.net

find_in_set(str, strlist)函數,若是str是在strlist(以英文逗號隔開的字符串)中,返回值大於或等於1。blog

 

Table B字符串

id     pid    valueget

1       0       it

12     1  

13     1

若是A表中的type字段值是B中的,現要根據pid去查詢A表中的記錄,即:查詢參數是B表中的id,如B表中id=1有2個子集(id=12,id=13),因此查詢A表中含有12或13的記錄。

這裏我使用了函數(或許有其餘更簡單的方法)

 

CREATE FUNCTION IF_BELONGS_TO(pid int, targetStr VARCHAR(200))

RETURNS INT(11)

BEGIN  

    DECLARE a INT;  

    DECLARE b INT DEFAULT 0;

  DECLARE c INT DEFAULT 0;  

  DECLARE cursor_name CURSOR FOR SELECT id FROM B WHERE pid = pid;   

  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET c = 1;    

    OPEN cursor_name;   

    FETCH cursor_name INTO a;    

    WHILE c <> 1 DO   

IF FIND_IN_SET(a, targetStr) THEN

SET b = 1;

SET c = 1;

END IF;  

        FETCH  cursor_name INTO a;  

    END WHILE;  

    CLOSE cursor_name ; 

    RETURN b;

END; 

使用了遊標循環結果集。函數返回值大於0時則說明包含。

調用函數:

select * from A where if_belongs_to(1, type) > 0

相關文章
相關標籤/搜索