2017-04-10 109 views
0

我有這樣的代碼來過濾我有超過16K的結果尋找一個錶行「實驗室」的名字:LIKE子句結果的mysqli

$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); 
$mysqli->set_charset("utf8"); 

$text = $mysqli->real_escape_string($_GET['term']); 

$query = "SELECT name FROM labs WHERE name LIKE '%$text%'"; 
$result = $mysqli->query($query); 
$json = '['; 
    $first = true; 
    while($row = $result->fetch_assoc()){ 
     if (!$first) { $json .= ','; } else { $first = false; } 
     $json .= '{"value":"'.$row['name'].'"}'; 
    } 
$json .= ']'; 
echo $json; 

問題是,當我插入前兩輸入的字母總是顯示該表格中的全部數據,例如,如果我把der,我需要結果只顯示名稱中含有der的數據,但現在總是顯示整行

回答

0

InnoDB中默認的最小字長設置爲3。這可能會導致它在輸入3個或更少的字符數時返回所有結果。請參閱下面的參考。嘗試增加計數

https://dev.mysql.com/doc/refman/5.7/en/fulltext-fine-tuning.html

如果你想匹配由左到右,那麼你可以使用它像

$query = "SELECT name FROM labs WHERE name LIKE '$text%'";