DB/MYSQL

쿼리 조건에 들어갈 내용을 파라미터로 전달하기

MAKGA 2021. 10. 18. 21:36
320x100

C++ 서버에서 MYSQL로 SELECT할 경우 임의로 조건을 컨트롤 하고 싶을 때가 있다.

예를 들자면 서버에서 어떤 때는 1,2,3 어떨 때는 3의 값만 SELECT을 하고 싶은데 하나의 SP로 컨트롤 하고 싶을 때 사용하는 방법이다.

 

b.type 컬럼의 데이터 타입이 정수라고 하자.

_type은 텍스트 파라미터로 전달되는데 단순히 WHERE b.type IN 으로 작성하면 에러가 난다.

형와 syntax가 맞지 않기 때문이다.

 

그래서 FIND_IN_SET이라는 함수를 써서 문제를 해결한다.

FIND_IN_SET 함수는 콤마로 구분되어 있는 문자열('a,b,c,d')에 매칭되는 str문자('b')가 있는지 확인해주는 함수다.
매칭되는 것이 있을 경우 몇번째에 있는지 포지션 값을 리턴하고 없으면 0을 리턴한다.

 

DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_name` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_name`(
	IN `_uid` BIGINT UNSIGNED
,	IN `_type` VARCHAR(255)
)
BEGIN
	UPDATE
		a
	JOIN
		b
	ON
		a.idx = b.idx
	SET
		a.value = 0
	WHERE
		a.uid = _uid AND
		FIND_IN_SET(b.type, _type);
END$$
DELIMITER ;

 

https://eyecandyzero.tistory.com/245

 

320x100

'DB > MYSQL' 카테고리의 다른 글

쿼리실행 후 영향받은 쿼리 수 구하기  (0) 2021.11.05
모든 저장 프로시저내에서 텍스트 찾기  (0) 2021.10.25
동적 쿼리 작성하기  (0) 2021.10.15
Replication  (0) 2021.10.14
C API Asynchronous 함수 정리  (0) 2021.10.13