2015-03-19 75 views
0

我寫了一個PHP函數來執行暗示性搜索。該函數使用一個查詢來執行用戶輸入字符串的搜索和匹配,然後在列表中列出建議的匹配項。一切工作都按照預期在這一點上,但我希望改善它。如何提高我的查詢以字符而不是字符串搜索?

下面是我的代碼:

function fillQueryData() { 
    $dbName = $_SESSION ['dbN']; 
    $link = mysqli_connect ('localhost', 'root', '', $dbName); 
    if (! $link) { 
     die ("Connection failed" . mysqli_errno ($link)); 
    } 
    if (isset ($_POST ['name'])) { 
     $name = trim ($_POST ['name']); 
     $tblName = $_SESSION ['tblN']; 
     $colqry = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '$dbName' AND TABLE_NAME = '$tblName'"; 
     echo "<ul>"; 
     $col_names = mysqli_query ($link, $colqry); 
     while ($col = mysqli_fetch_array ($col_names, MYSQLI_ASSOC)) { 
      $colName = $col ['COLUMN_NAME']; 
      $tblQry = "SELECT * FROM $tblName WHERE $colName='$name'LIMIT 4"; 
      $query2 = mysqli_query ($link, $tblQry); 
      while ($query3 = mysqli_fetch_array ($query2)) { 
       ?> 

<li onclick='fill("<?php echo $query3 [$colName]; ?>") '><?php echo $query3 [$colName]; ?> </li> 

我的問題是如何提高我的查詢,以便搜索可以通過一個字符串,而不是僅使用滿弦的字符來進行。例如,目前爲了獲得有效的匹配,我必須搜索完整的單詞。我想獲得建議時,我打字的這個字母表示單詞等

查詢

"SELECT * FROM $tblName WHERE $colName='$name'" 

回答

1

認爲它應該是

"SELECT * FROM $tblName WHERE $colName LIKE '$name%'" 

但我不知道這是否會充分地執行好。除非數據量過大,否則將所有名稱放入JSON數組並將其用於用戶類型時可能是一個想法...

+0

Sry,我編輯了答案 - 在錯誤的世界中精神上;-)) – MBaas 2015-03-19 11:21:03

+1

謝謝工作正常! – b0w3rb0w3r 2015-03-19 11:33:39

+0

感謝您的反饋! :-) – MBaas 2015-03-19 11:34:21