2014-12-22 3 views
0

내 결과에서 다양한 수의 사용자/ID를 제외하고 싶습니다. IN 연산자에 다양한 수의 사용자 이름/ID를 전달할 수 있습니까? 다음과 같이 단순화 된 코드 : - 폐쇄를 위해서배열을 MySQL 루틴 IN 연산자로 전달

CREATE DEFINER=`root`@`localhost` PROCEDURE `myroutine`(@userids) 
--possible process here-- 
BEGIN 
SELECT * FROM mytable WHERE `myid` NOT IN (@useridsprocessed) 
END 
+0

예, PHP로 (당신이 그것을 태그)는 @useridsprocessed VAR에게 –

+0

예를 채울 수 있습니다. 단일 문자열로 ID를 전달하는 단순한'myroutine ('1,2,3')'이라 할지라도 동적으로 선택을 준비/실행해야한다. 왜냐하면'not in (@userids)'는 일하지 마라. 그것은 'not in ('1,2,3 ')'와 동일 할 것입니다. –

+1

['FIND_IN_SET'] (https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set)을 찾으십니까? 경고 : IN 연산자를 요청했습니다. 이것은 bool로 캐스팅하면 IN 내에서 사용할 수있는 문자열 함수입니다. – hakre

답변

0

이 내가 일을 얻을 수있는 가장 좋은 대답이지만, 나 같은 지저분한 친다. 다음과 같이이라고

CREATE DEFINER=`root`@`localhost` PROCEDURE `mytable`(IN excluded VARCHAR(255)) 
BEGIN 
SET @sql = CONCAT('SELECT * FROM entries WHERE `id` NOT IN (', excluded,')'); 
    PREPARE stmt FROM @sql; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 
END 

DELIMITER $$ 
: -

SET @excluded = '\'19\',\'26\',\'27\''; 
call liquidfinger.mytable(@excluded); 
관련 문제