다른 테이블의 일부 ID (dp_business_locations)를 쉼표로 구분하여 포함하는 'dealBusinessLocations'라는 필드가 있습니다 ('dp_deals'테이블에서).in() 함수로 저장된 mysql 함수에서 반환 된 값을 사용하는 방법은 무엇입니까?
dealBusinessLocations
----------------------
0,20,21,22,23,24,25,26
이 값은 쿼리의 in() 함수 내에서 사용해야합니다.
select * from dp_deals as d left join dp_business_locations as b on(b.businessLocID IN (d.dealBusinessLocations) ;
사인 MySQL은 임의의 문자열 기능을 폭발 지원하지 않는 것처럼, 나는 기능이 완벽하게 작동하는 저장 기능
delimiter //
DROP FUNCTION IF EXISTS BusinessList;
create function BusinessList(BusinessIds text) returns text deterministic
BEGIN
declare i int default 0;
declare TmpBid text;
declare result text default '';
set TmpBid = BusinessIds;
WHILE LENGTH(TmpBid) > 0 DO
SET i = LOCATE(',', TmpBid);
IF (i = 0)
THEN SET i = LENGTH(TmpBid) + 1;
END IF;
set result = CONCAT(result,CONCAT('\'',SUBSTRING(TmpBid, 1, i - 1),'\'\,'));
SET TmpBid = SUBSTRING(TmpBid, i + 1, LENGTH(TmpBid));
END WHILE;
IF(LENGTH(result) > 0)
THEN SET result = SUBSTRING(result,1,LENGTH(result)-1);
END IF;
return result;
END//
delimiter ;
을 만들었습니다.
mysql> BusinessList('21,22')
BusinessList('21,22')
-----------------------
'21','22'
그러나 함수를 사용하는 쿼리는 작동하지 않습니다. 여기 쿼리입니다.
select * from dp_deals as d left join dp_business_locations as b on(b.businessLocID IN (BusinessList(d.dealBusinessLocations)));
나는 또한 기능 argumet 정적 값을 사용하여 시도
, 그러나 아무 소용이
select * from dp_deals as d left join dp_business_locations as b on(b.businessLocID IN (BusinessList('21,22')));
이 함수에서 반환 된 값을 사용하여 몇 가지 문제가있는 것 같다.
이 테이블을 정규화. 그때까지'FIND_IN_SET()'함수를 사용하십시오. –