[SQL] SQL LIKE %의 내부 어레이
SQLSQL LIKE %의 내부 어레이
그래서 같은 단일 값에 대한 SQL LIKE %의 쿼리를 수행하는 방법을 알고 :
SELECT * FROM users WHERE name LIKE %tom%;
내 LIKE에 대한 검색어가 배열에서 유래하지만 만약 내가 어떻게 이렇게합니까? 예를 들어, 우리는이 같은 배열을 가정 해 봅시다 :
$words = array("Tom", "Smith", "Larry");
어떻게처럼 내 배열의 단어를 검색 내 SQL LIKE의 %를 수행 할 :
SELECT * FROM users WHERE name LIKE %[each_element_from_my_array]%
foreach는 루프 또는 뭔가 내부 전체 쿼리를주지 않고
편집 : 내가 CakePHP의 찾기 ( '모든') 방법의 조건 내에서 CakePHP는이 일을 해요 언급하는 그래서 복잡하게 물건을 조금 잊어 버렸습니다.
감사
해결법
-
==============================
1.
$sql = array('0'); // Stop errors when $words is empty foreach($words as $word){ $sql[] = 'name LIKE %'.$word.'%' } $sql = 'SELECT * FROM users WHERE '.implode(" OR ", $sql);
편집 : CakePHP의 코드는 옵션 :
foreach($words as $word){ $sql[] = array('Model.name LIKE' => '%'.$word.'%'); } $this->Model->find('all', array( 'conditions' => array( 'OR' => $sql ) ));
이 물건에 최대 읽기 : http://book.cakephp.org/1.3/en/view/1030/Complex-Find-Conditions
-
==============================
2.표준 SQL의 경우, 다음과 같습니다
표준 SQL의 경우, 다음과 같습니다
SELECT * FROM users WHERE name LIKE '%tom%' OR name LIKE '%smith%' OR name LIKE '%larry%';
당신이 MySQL을 사용하고 있기 때문에 당신은 RLIKE (일명, REGEXP)를 사용할 수 있습니다
SELECT * FROM users WHERE name RLIKE 'tom|smith|larry';
-
==============================
3.당신은 할 수 없습니다. 이 와일드 카드에 대한 어떠한 지원, ... % .. % 또는 필드 % 등 .. % 나 있습니다 .... 곳과 같은 체인으로 연결된 필드로 절에서만 수행 추출물 문자열 일치해야합니다.
당신은 할 수 없습니다. 이 와일드 카드에 대한 어떠한 지원, ... % .. % 또는 필드 % 등 .. % 나 있습니다 .... 곳과 같은 체인으로 연결된 필드로 절에서만 수행 추출물 문자열 일치해야합니다.
-
==============================
4.정규 표현식을 사용하여 시도
정규 표현식을 사용하여 시도
SELECT * FROM users where fieldName REGEXP 'Tom|Smith|Larry';
-
==============================
5.난 그냥 472,084의 코드를했다.
난 그냥 472,084의 코드를했다.
$sql = array('0'); // Stop errors when $words is empty foreach($words as $word){ $sql[] = 'name LIKE %'.$word.'%' } $sql = 'SELECT * FROM users WHERE '.implode(" OR ", $sql);
그것은 나에게 오류 SQL을 반환 있기 때문에 내 자신을 위해, 나는 그것을 수정했다. 스레드를 읽을거야 사람들을 위해 I 포스트를.
foreach($words as $word){ $sql[] = 'name LIKE \'%'.$word.'%\''; } $sql = 'SELECT * FROM users WHERE '.implode(" OR ", $sql);
그들 사이의 차이가 인용에 관한 것입니다, 내 MySQL의 DB는 문제가했다! 그래서 내가 $ SQL [] = '이름 % LIKE'. $ 단어에서 견적을 탈출했다. '%' 지금은 작업이 완벽합니다.
-
==============================
6./ ** * 내파 "[]"블록과 다른 문자들을 그룹화 값의 다차원 어레이. 내파 배열 * @param 배열 $ 어레이 내파 배열 * @ 반환 문자열 * / 함수 hoArray2SqlLike ($ 배열) { 만약 (!의는 is_array ($ 배열)) $ 배열을 반환;
/ ** * 내파 "[]"블록과 다른 문자들을 그룹화 값의 다차원 어레이. 내파 배열 * @param 배열 $ 어레이 내파 배열 * @ 반환 문자열 * / 함수 hoArray2SqlLike ($ 배열) { 만약 (!의는 is_array ($ 배열)) $ 배열을 반환;
$values = array(); $strings = array(); foreach ( $array as $value ) { foreach ( str_split( $value ) as $key => $char ) { if ( ! is_array( $values[ $key ] ) ) { if ( isset( $values[ $key ] ) ) { if ( $values[ $key ] != $char ) { $values[ $key ] = array( $values[ $key ] ); $values[ $key ][] = $char; } } else $values[ $key ] = $char; } elseif ( ! array_search( $char , $values[ $key ] ) ) $values[ $key ][] = $char; } } foreach ( $values as $value ) { if ( is_array( $value ) ) $value = '['.implode( '', $value ).']'; $strings[] = $value; } return implode( '', $strings );
}
-
==============================
7.이 코드에서 우리는 SQL 쿼리에 따옴표를 얻을 수 없다
이 코드에서 우리는 SQL 쿼리에 따옴표를 얻을 수 없다
$sql = array('0'); // Stop errors when $words is empty foreach($words as $word){ $sql[] = 'name LIKE %'.$word.'%' } $sql = 'SELECT * FROM users WHERE '.implode(" OR ", $sql); SELECT * FROM person where name like %"Tom"% OR name like %"Smith"% OR name like %"Larry"%; // error in double quotes and % is out side of Double quotes .
또는 당신은 쉼표로 분리 된 값을 사용할 수 있습니다 : -
$name = array(Tom, Smith, Larry); $sql="SELECT * FROM person"; extract($_POST); if ($name!=NULL){ $exp_arr= array_map('trim', explode(",",$name)); echo var_export($exp_arr); //die; foreach($exp_arr as $val){ $arr = "'%{$val}%'"; $new_arr[] = 'name like '.$arr; } $new_arr = implode(" OR ", $new_arr); echo $sql.=" where ".$new_arr; } else {$sql.="";}
이 같은 에코 SQL 쿼리 : -
SELECT * FROM person where name like '%Tom%' OR name like '%Smith%' OR name like '%Larry%';
-
==============================
8.대부분의 SQL 시스템은 문자 값으로 밀어 보자. CHAR (10) = 바꿈. 그래서 가끔, 대신 코딩 모든 탈출 운동, 당신은 너무 많은 다른 코딩 문제없이 SQL 문자열이 방법으로 작은 따옴표, 큰 따옴표 및 다른 일을 푸시 할 수 있습니다.
대부분의 SQL 시스템은 문자 값으로 밀어 보자. CHAR (10) = 바꿈. 그래서 가끔, 대신 코딩 모든 탈출 운동, 당신은 너무 많은 다른 코딩 문제없이 SQL 문자열이 방법으로 작은 따옴표, 큰 따옴표 및 다른 일을 푸시 할 수 있습니다.
힌트를 - 그냥.
from https://stackoverflow.com/questions/9416062/sql-like-inside-array by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 바이트 배열에서 파일 확장자를 추출하는 방법 (0) | 2020.06.27 |
---|---|
[SQL] SQL 벌크 기록 업데이트 (0) | 2020.06.27 |
[SQL] SQL의 성능은 사용 변종을 "EXISTS" (0) | 2020.06.27 |
[SQL] DB2 데이터베이스에 여러 행을 삽입 (0) | 2020.06.27 |
[SQL] SQL에 pyodbc 삽입 (0) | 2020.06.27 |