데이터베이스에 연결 테이블이 필요할 수도 있습니다. 다른 쉼표로 구분 된 목록과 비교하기 위해 쉼표로 구분 된 목록을 열에 저장하면 어떤 종류의 규모라도 얻을 경우 실적에 해를 끼칠 수 있습니다.
내가보기 엔 당신이 테이블 (연관 기관) 아마도 약간 데이터베이스 설계를 변경하도록 설득 연결에 대한 자세한 읽어 좋을 것
: 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
샘플 쿼리는 사용자의 설정에있다.
변수의 개별 항목마다 FIND_IN_SET을 사용하여 OR에 검사를 적용해야하지만 이는 실제로 잘못된 데이터베이스 디자인이므로 가능한 모든 유형의 쿼리를 만들려면 테이블을 표준화해야합니다 더 쉽게 –
* "나는 쉼표로 구분 된 목록을 포함 할 수있는 변수가 있습니다."* -이 부분은 나에게 불분명합니다. 귀하의 질문은 이것에 관해서 너무 광범위하다는 것을 의미합니다. 그것 또는 그렇지 않을 것인가? –