当前位置:首页 » Mysql技术教程

MySQL FIND_IN_SET函数查询笔记

2017-10-12 06:41 本站整理 浏览(96)

Mysql查询时,查询某个字段是否包含某个值的记录:

Table A

id   type
1    12,23

2    12,44

需要查询A表中type字段含12的记录,可以使用like模糊查询,但是会查询到一些我们不需要的记录。type字段是以英文逗号分割,可以使用mysql的find_in_set函数:

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

find_in_set(str, strlist)函数,如果str是在strlist(以英文逗号隔开的字符串)中,返回值大于或等于1。

 

Table B

id     pid    value

1       0       

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