2017-03-15 174 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 | 

輸出

 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頂部把它的數字,然後將其附加到現有的查詢。

例子:
搜索輸入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',所以我們需要爆炸數字?其他快速解決方案? –

0

首先,你需要分割字符串,

$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"; 

我希望這將有助於。