2017-09-24 5 views
0

쉼표로 구분 된 목록을 포함 할 수있는 변수가 있습니다. 내 데이터베이스에는 열 구분 목록이있는 열도 있습니다.FIND_IN_SET에서 여러 바늘 찾기

나는 내 변수는 어떻게 하나 개 이상의 항목에 있는지 확인 할 수 있습니다 "A, B, C"와 같은 목록이 포함되어있는 경우, 그러나

FIND_IN_SET(needle, haystack)를 사용하여 해당 DB 열에서 단일 값을 찾을 수있어 목록이 열의 항목 하나 이상과 일치합니까? 이것이 가능한가?

+0

변수의 개별 항목마다 FIND_IN_SET을 사용하여 OR에 검사를 적용해야하지만 이는 실제로 잘못된 데이터베이스 디자인이므로 가능한 모든 유형의 쿼리를 만들려면 테이블을 표준화해야합니다 더 쉽게 –

+0

* "나는 쉼표로 구분 된 목록을 포함 할 수있는 변수가 있습니다."* -이 부분은 나에게 불분명합니다. 귀하의 질문은 이것에 관해서 너무 광범위하다는 것을 의미합니다. 그것 또는 그렇지 않을 것인가? –

답변

1

데이터베이스에 연결 테이블이 필요할 수도 있습니다. 다른 쉼표로 구분 된 목록과 비교하기 위해 쉼표로 구분 된 목록을 열에 저장하면 어떤 종류의 규모라도 얻을 경우 실적에 해를 끼칠 수 있습니다.

내가보기 엔 당신이 테이블 (연관 기관) 아마도 약간 데이터베이스 설계를 변경하도록 설득 연결에 대한 자세한 읽어 좋을 것

: https://en.wikipedia.org/wiki/Associative_entity

을 여러 검색을 수행 할 수 FIND_IN_SET을 사용하는 방법에 대한 귀하의 질문에 대답하기를 단일 쿼리에서 동적으로 쿼리를 작성해야합니다.

다음은 쿼리를 동적으로 작성하는 방법을 보여주는 기본 예입니다. SQL injection (http://php.net/manual/en/security.database.sql-injection.php)을 방지하기위한 적절한 조치를 취하십시오.

// This is the list you want to search against - for your actual implementation you would use your column name 
$haystack_str = '2,4,6,8,10'; 

// This is the comma separated list you want to use as your needle 
$search_str = '1,2,3'; 

// Break the string apart into separate values 
$search_array = explode(',', $search_str); 

// Store your query fragments 
$query_array = array(); 

// Loop through each string value you want to use as your needle 
foreach ($search_array as $needle) { 
    // PLEASE TAKE PRECAUTIONS AGAINST SQL INJECTION !!! 
    $query_array[] = sprintf('FIND_IN_SET("%s","%s")', $needle, $haystack_str); 
} 

// Join all pieces together using OR 
$query_str = implode(' OR ', $query_array); 

// Show your example query 
echo 'SELECT ' . $query_str . ';'; 

예 : https://eval.in/867963

이것은 다음 쿼리 생성 : 문자열 STR이 이루어진 문자열리스트 strlist 인 경우 SELECT FIND_IN_SET("1","2,4,6,8,10") OR FIND_IN_SET("2","2,4,6,8,10") OR FIND_IN_SET("3","2,4,6,8,10");

는 N 1의 범위의 값을 돌려을 N 부분 문자열 strlist에 strlist가 없거나 strlist가 빈 문자열 인 경우 0을 반환합니다. 검색 값 중 하나를 나타냅니다 1를 생성합니다 https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set

샘플 쿼리는 사용자의 설정에있다.