programing

MySQL - 값이 배열에 있는 행을 선택하는 방법

firstcheck 2022. 11. 27. 17:34
반응형

MySQL - 값이 배열에 있는 행을 선택하는 방법

일반적으로 어레이 값(이 경우 1, 2, 3)을 알면 다음과 같은 작업을 수행할 수 있습니다.

SELECT * WHERE id IN (1,2,3)

그러나 어레이 값은 알 수 없습니다. 찾고 싶은 값은 어레이에 '저장'되어 있을 뿐입니다.

SELECT * WHERE 3 IN (ids) // Where 'ids' is an array of values 1,2,3

그건 통하지 않아요.다른 방법이 있나요?

FIND_를 사용합니다.IN_SET 함수:

SELECT t.*
  FROM YOUR_TABLE t
 WHERE FIND_IN_SET(3, t.ids) > 0

쿼리가 SQL에 도달할 때까지 이미 목록을 확장해야 합니다.신뢰할 수 있는 내부 데이터 원본의 ID를 사용하는 경우(예: 데이터베이스에서 ID를 선택한 경우)는 다음과 같습니다.

$sql = 'SELECT * WHERE id IN (' . implode(',', $ids) . ')';

단, 데이터가 사용자로부터 전송되는 경우에는 다음과 같이 가장 쉽게 정수 값만 얻을 수 있도록 해야 합니다.

$sql = 'SELECT * WHERE id IN (' . implode(',', array_map('intval', $ids)) . ')';

배열 요소가 정수가 아닌 경우 다음과 같은 방법을 사용할 수 있습니다.

$skus  = array('LDRES10','LDRES12','LDRES11');   //sample data

if(!empty($skus)){     
    $sql = "SELECT * FROM `products` WHERE `prodCode` IN ('" . implode("','", $skus) . "') "      
}

를 사용하는 경우FIND_IN_SET기능:

FIND_IN_SET(a, columnname)"a"가 포함된 모든 레코드는 단독으로 또는 다른 레코드와 함께 반환됩니다.

그리고.

FIND_IN_SET(columnname, a)"a"가 포함된 레코드만 생성하며 다른 레코드가 포함된 레코드만 생성하지 않습니다.

따라서 record1이 (a, b, c)이고 record2가 (a)인 경우

FIND_IN_SET(columnname, a)record2만 출력하는 반면FIND_IN_SET(a, columnname)두 가지 레코드를 모두 생성합니다.

언급URL : https://stackoverflow.com/questions/4037145/mysql-how-to-select-rows-where-value-is-in-array

반응형