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