2014-02-25 4 views
2

에 쉼표로 구분 된 열에서 muliple 값을 검색 나는 myColumn 무작위 FIND_IN_SET('1', myColumn) OR FIND_IN_SET('3', myColumn) OR FIND_IN_SET('5', myColumn)mysql을

만약에 1,2,3 또는 2,3,6.. 같은 데이터를 포함 할 수있는 곳 FIND_IN_SET()를 사용하여 여러 OR 조건에 해결책을 시도 할 가치가 있다고 생각하지 않습니다 이것은 내가 가능하면

+0

예. DB 구조를 표준화하십시오. –

+0

@ AlmaDo 제게 최적의 솔루션을 제공해 주시겠습니까 –

답변

3

당신에게 데이터베이스를 정상화 내 쿼리에 맞게 표준화 된 솔루션이 필요할 수 있습니다, 오른쪽에 하나가 아니라 당신이 필사적 경우이 뭔가를 할 수 있습니다 : -

SELECT DISTINCT Sometable.* 
FROM SomeTable 
INNER JOIN 
(
    SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 
) Sub1 
WHERE FIND_IN_SET(Sub1.i, Sometable.myColumn) 

편집 - 루프

<?php 

$some_keys = array(1,2,3); 

$sql = "SELECT DISTINCT Sometable.* 
     FROM SomeTable 
     INNER JOIN 
     (
      SELECT ".implode(" AS i UNION SELECT ", $some_keys)." AS i 
     ) Sub1 
     WHERE FIND_IN_SET(Sub1.i, Sometable.myColumn)"; 

?> 

또는 값이 다른 테이블의 키에 적용하는 경우 다음 당신이 사용할 수없는 키의 배열을 사용 : -

<?php 

$some_keys = array(1,2,3); 

$sql = "SELECT DISTINCT Sometable.* 
     FROM SomeTable 
     INNER JOIN SomeOtherTable 
     ON SomeOtherTable.id IN (".implode(",", $some_keys).") 
     AND FIND_IN_SET(SomeOtherTable.id, Sometable.myColumn)"; 

?> 
+0

고맙습니다. 어쨌든 1,2,3 ... 동적 일 때 쿼리를 반복해야합니다. 반복하지 않고 옵션을 원한다면 –

+0

왜 루프해야합니까? 하위 쿼리 (또는 일련의 FIND_IN_SET 문)를 아주 쉽게 작성할 수 있습니다. 예를 들어 PHP에서 implode를 사용합니다. – Kickstart

+0

검색 키가 동적이어서 루프가 필요합니다. –