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