반응형
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
그건 통하지 않아요.다른 방법이 있나요?
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
반응형
'programing' 카테고리의 다른 글
Laravel OrderBy 관계 수 (0) | 2022.11.27 |
---|---|
새 Gradle 프로젝트를 가져오지 못했습니다. 빌드 도구 리비전 *.0.0을 찾지 못했습니다. (0) | 2022.11.27 |
mysql 파일 형식 및 대조 변경 (0) | 2022.11.27 |
JavaScript의 숨겨진 기능 (0) | 2022.11.27 |
페이지 로드 시간을 단축하려면 이 WordPress javascript 스니펫을 마지막으로 로드하려면 어떻게 연기하거나 비동기화해야 합니까? (0) | 2022.11.27 |