私は単純なsearchアルゴリズムを構築しており、スペースを含む文字列を破り、その上でdbを検索します:
$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
を使用するには(試行したとおり)すべての条件がtrueである必要があり、OR
を使用するには少なくとも1つの条件がtrueであることが必要です。
これを試して
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 ;
これは、1つまたは複数のフィールドが複数の単語を検索する両方の場合に完全に機能します。
これが誰かを助けることを願っています。ありがとう
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+'%' )
)
これはここで部分的に回答されています: MySQL Like multiple values
反対する
$ search = explode( ''、$ 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();
このコードはテストしていませんが、これは私があなたの場合に行うことです。これがお役に立てば幸いです。