SQL 동일한 필드에서 여러 값 검색
간단한 검색 알고리즘을 만들고 있으며 공백으로 문자열을 구분하고 데이터베이스를 검색합니다.
$search = "Sony TV with FullHD support";
$search = explode( ' ', $search );
SELECT name FROM Products WHERE name LIKE %$search[1]% AND name LIKE %$search[2]% LIMIT 6
이것이 가능합니까?
예, SQL을 사용할 수 있습니다.IN
연산자를 사용하여 여러 개의 절대값을 검색합니다.
SELECT name FROM products WHERE name IN ( 'Value1', 'Value2', ... );
사용할 경우LIKE
다음을 사용해야 합니다.OR
대신:
SELECT name FROM products WHERE name LIKE '%Value1' OR name LIKE '%Value2';
사용.AND
(시도한 대로) 모든 조건이 참이어야 합니다.OR
하나 이상의 참이 필요합니다.
사용해 보세요.
사용.UNION
$sql = '';
$count = 0;
foreach($search as $text)
{
if($count > 0)
$sql = $sql."UNION Select name From myTable WHERE Name LIKE '%$text%'";
else
$sql = $sql."Select name From myTable WHERE Name LIKE '%$text%'";
$count++;
}
사용.WHERE IN
$comma_separated = "('" . implode("','", $search) . "')"; // ('1','2','3')
$sql = "Select name From myTable WHERE name IN ".$comma_separated ;
이것은 하나 또는 여러 필드가 여러 단어를 검색하는 두 경우 모두에서 완벽하게 작동합니다.
이것이 누군가에게 도움이 되기를 바랍니다.감사해요.
declare @searchTrm varchar(MAX)='one two three four';
--select value from STRING_SPLIT(@searchTrm, ' ') where trim(value)<>''
select * from Bols
WHERE EXISTS (SELECT value
FROM STRING_SPLIT(@searchTrm, ' ')
WHERE
trim(value)<>''
and(
BolNumber like '%'+ value+'%'
or UserComment like '%'+ value+'%'
or RequesterId like '%'+ value+'%' )
)
아래 쿼리를 실행할 수 있습니다.
SELECT name FROM Products WHERE REGEXP '.*Value1|.*Value2';
파이프 기호(|) 앞이나 뒤에는 공백이 없어야 합니다.
이것은 여기서 부분적으로 답변되었습니다: MySQL 여러 값을 좋아합니다.
을 반대합니다
$search = 폭발( ', $search );
SQL 쿼리에 직접 입력하면 검색 표시줄을 통해 SQL 주입이 쉬워집니다.캐릭터들이 다음과 같은 재미있는 시도를 할 경우를 대비해 먼저 탈출해야 합니다: "--; Drop TABLE name;
$search = str_replace(")", "", search );
하지만 그것조차도 완전히 안전한 것은 아닙니다.안전하려면 SQL 준비 문을 사용해야 합니다.정규식을 사용하면 원하는 것을 준비하고 만드는 기능을 훨씬 쉽게 만들 수 있습니다.
function makeSQL_search_pattern($search) {
search_pattern = false;
//escape the special regex chars
$search = str_replace('"', "''", $search);
$search = str_replace('^', "\\^", $search);
$search = str_replace('$', "\\$", $search);
$search = str_replace('.', "\\.", $search);
$search = str_replace('[', "\\[", $search);
$search = str_replace(']', "\\]", $search);
$search = str_replace('|', "\\|", $search);
$search = str_replace('*', "\\*", $search);
$search = str_replace('+', "\\+", $search);
$search = str_replace('{', "\\{", $search);
$search = str_replace('}', "\\}", $search);
$search = explode(" ", $search);
for ($i = 0; $i < count($search); $i++) {
if ($i > 0 && $i < count($search) ) {
$search_pattern .= "|";
}
$search_pattern .= $search[$i];
}
return search_pattern;
}
$search_pattern = makeSQL_search_pattern($search);
$sql_query = "SELECT name FROM Products WHERE name REGEXP :search LIMIT 6"
$stmt = pdo->prepare($sql_query);
$stmt->bindParam(":search", $search_pattern, PDO::PARAM_STR);
$stmt->execute();
저는 이 코드를 테스트하지 않았지만, 당신의 경우에는 이렇게 할 것입니다.이것이 도움이 되길 바랍니다.
오래전 일인 건 알지만 해결책이 있어요다음과 같이 해결할 수 있습니다.
#intial query
query = 'SELECT var1, var2 FROM dbo.db_name WHERE'
if status :
query = query + " AND status='" + status + "'"
if type :
query = query + " AND Type='" + type + "'"
if number :
query = query + " AND Number='" + number + "'"
if cancel_request:
query = query + " AND CancelRequest='" + cancel_request + "'"
query = query + ' ORDER BY transid DESC'
cur.execute(query)
언급URL : https://stackoverflow.com/questions/16240041/sql-search-multiple-values-in-same-field
'programing' 카테고리의 다른 글
Javascript 스위치 vs. if... 그렇지 않으면... (0) | 2023.07.23 |
---|---|
MySQL 테이블에서 누락된 ID 가져오기 (0) | 2023.07.23 |
스크킷 학습으로 다중 클래스 사례의 정밀도, 리콜, 정확도 및 f1 점수를 계산하는 방법은 무엇입니까? (0) | 2023.07.23 |
Oracle의 최대 문 길이는 얼마입니까? (0) | 2023.07.23 |
PHP fileinfo가 정의되지 않은 함수입니다. (0) | 2023.07.23 |