2012-09-18 43 views
2

你好我真的坐在这里思考以下问题:如何使用关键字的搜索引擎

我有过类似的表运行的自我暗示的搜索引擎:

zipcode city  sum 

12345  town  5 

我做的实现通过使用JavaScript来搜索每个要输入的字母的循环,直到那一点,我只能寻找一个关键字,例如可以是城市名称或邮政编码。

现在我想结合这两个,这样我就不再限制用户了这些两个,甚至当输入城市和邮政编码时,它会被发现。

为此我想通过到单独的每个关键词:

preg_split('/[\s]+/', $keywords); 

这是目前的问题。使用这种方式,每个关键字将被插入到一个数组中。它是如何工作的:

在html中我有一个输入字段。在下面我有一个无序列表div。在这个div javascript会自动添加我的search.php文件的结果。看起来像:

include('../scripts/db_connect.php'); 

if (isset($_POST['search_term']) == true && empty($_POST['search_term']) == false) { 

$search_term = $db->real_escape_string(htmlentities(trim($_POST['search_term']))); 

$search_term_query = "SELECT * FROM `a` WHERE `b` LIKE '$search_term%'"; 

if ($result_query = $db->query($search_term_query)) { 

    while ($row = $result_query->fetch_assoc()) { 

    echo '<li>', 
      $row["a"], 
      ' ', 
      $row["b"], 
      ' ', 
      '(', 
      $row["c"], 
      ')', 
      ' </li>'; 
    } 

} 

} 

和我的javascript只处理一个关键字:

$(document).ready(function() { 
    $('.searchfield').keyup(function() { 
     var search_term = $(this).attr('value'); 
     $.post('ajax/search.php', {search_term:search_term}, function(data) { 
      $('.result').html(data); 

      $('.result li').click(function() { 
       var result_value = $(this).text(); 
       $('.searchfield').attr('value', result_value); 
       $('.result').html(''); 
      }); 
     }); 
    }); 
}); 

所以此刻,我不知道如何解决。如果有人能帮助我,我真的很感激。谢谢。

+0

您可能只想使用'explode'而不是'preg_split':http://micro-optimization.com/explode-vs-preg_split –

回答

0

只要保持它的价值,并通过邮政发送整个字符串到您的PHP文件。 在你的search.php你可以尝试这样的事:

function split_search_term($val) { 
    $val = explode(" ", $val); 
    $search_term_query = "SELECT * FROM `a` WHERE "; 
    foreach($val as $val_row) { 
     $search_term_query .= "(`zipcode` LIKE '" . $search_term . "%' OR `city` LIKE '" . $search_term . "%') OR "; 
    } 
    if(count($val) > 0) { 
     // The IF statement is used to make sure that the foreach loop has been fired at least once, 
     // or else it would just chop off the 'WHERE ' part and you'll get something like: 
     // "SELECT * FROM `a` WH" and this will give you an error 
     $search_term_query = substr($search_term_query, 0, -4); // To cut off the last remaining ' OR ' in the query 
    } else { 
     $search_term_query .= "0"; // To finish the query so it doesn't return anything we don't want 
    } 

    return $search_term_query; 
} 

从这里你可以继续获取结果。我希望它能起作用。

相关问题