2017-03-15 12 views
0

私は私が検索した場合プットを出すために必要MySQLの検索クエリ

88746 
    65654 
    78655 
    67856 
    09958 
    55640 

データベース内の数字を持っている

「786」は意味検索キーが786

です
search result   
    88746 
    78655 
    67856 

出力条件は、その番号グループ内の7 8 6であり、検索キーが5の場合は5であることを意味し、5という数字のすべての行が表示される必要があることを意味します。 5出している例キーワードは65654,78655,67856,09958,55640が数字5は、私は、クエリを試してみました

この挑戦のためにmysqlのクエリを必要とする

番号のすべてがセットに発生したことを意味している

それは、より大きな数である場合は、個々の文字をチェックする必要があり
select * from plates where number LIKE %786% 

     -------- 
     number | 
     ------ | 
     88746 | 
     65654 | 
     78655 | 
     67856 | 
     09958 | 

OUTPUT

 number | 
     ------ | 
     88746 | 
     78655 | 
     67856 | 
+0

これらは文字列です。 – Strawberry

答えて

1

SELECT * FROM plates 
WHERE number LIKE '%7%' 
    AND number LIKE '%8%' 
    AND number LIKE '%6%' 

検索入力が多かれ少なかれ文字で構成されている場合は、クエリを変更する必要があります。私が示唆しているのは、テンプレート文字列"number like '%{$i}%'"をいくつか持っていて、$iの上に数字を入れて、それを既存のクエリに追加するというものです。

例:
検索入力は

$arr = str_split("786"); 
array_walk($arr, function (&$item) { 
    $item = '"%' . $item . '%"'; 
}); 
$in_clause = rtrim(implode(" OR ", $arr), 'OR '); 

$query = "select * from plates where number $in_clause"; 

は、私はこれが役立つことを願って、あなたは文字列を分割する必要があります8765.

$query = "SELECT * FROM plates WHERE "; 
$pattern = "number LIKE '%%%s%%' "; 
$input = "8765"; 
$c = strlen($input); // 8765 returns 4, 456 returns 3 etc. 
for ($i = 0; $i < $c; $i++) { 
    $pattern2 = ""; 
    $pattern2 = sprintf($pattern, $input[$i]); 
    if ($i < ($c - 1)) { // the last LIKE statement should not have AND 
     $pattern2 .= "AND "; 
    } 
    $query .= $pattern2; 
} 
echo $query // SELECT * FROM plates WHERE number LIKE '%8%' AND number LIKE '%7%' AND number LIKE '%6%' AND number LIKE '%5%' 
+0

ユーザーは '786'を検索し、検索キーは4桁または5桁または2桁であることがあります。彼らは '78'を検索して数字を爆発させる必要がありますか?その他の迅速なソリューション? –