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

相关文章
相关标签/搜索