我正在尝试创建一个搜索功能,用户可以在文本字段中输入两个单词,然后分割单词并构建一个MySQL查询。
这是我到目前为止所做的。
$search = mysql_real_escape_string( $_POST['text_field']);
$search = explode(" ", $search);
foreach($search as $word)
{
$where = "";
$where .= "product_code LIKE '%". $word ."%'";
$where .= "OR description LIKE '%". $word ."%'";
$query = "SELECT * FROM customers WHERE $where";
$result = mysql_query($query) or die();
if(mysql_num_rows($result))
{
while($row = mysql_fetch_assoc($result))
{
$customer['value'] = $row['id'];
$customer['label'] = "{$row['id']}, {$row['name']} {$row['age']}";
$matches[] = $customer;
}
}
else
{
$customer['value'] = "";
$customer['label'] = "No matches found.";
$matches[] = $customer;
}
}
$matches = array_slice($matches, 0, 5); //return only 5 results
它构造并运行查询,但返回有趣的结果。
任何帮助都将不胜感激。
答案 0 :(得分:1)
MySQL有一个名为LIMIT
的东西,所以你最后一行是不必要的。
使用全文搜索:http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html - 它更快更优雅
答案 1 :(得分:0)
如果您的数据库采用MyISAM表格式,您可以对您感兴趣的列进行全文搜索,如已提到的Sn0opy
我个人认为,当涉及到mySQL时,如果你真的想创建一个出色的搜索引擎,可以使用Sphinx(http://sphinxsearch.com/)或Solr(http://lucene.apache.org/solr/)
两者可能存在学习曲线,但结果是专业的。
答案 2 :(得分:0)
任何比“有趣的结果”更具体的机会?袖口外有几种可能性,但它实际上取决于返回的结果。我的PHP有点生疏,所以如果我的大脑投入一些java规则,我会先前道歉,但乍一看...
将数组命名为$ search之外的其他内容。这可能不是问题,但是由explode()创建的数组带有被爆炸的字符串的名称看起来很奇怪。尝试类似$ searching = explode(“”,$ search);然后在随后的foreach()循环中使用$ searching。
如果用户只放入一个搜索字词怎么办?如果$ text_field中没有空格,那么explode将返回一个空数组,这应该会彻底查询你的查询。在爆炸$ search之前,您至少应该验证$ text_field中是否有空格。同样,如果用户输入两个搜索词,但其中一个词是由空格分隔的两个词,该怎么办?再次,您将获得“有趣的结果”,因为您将获得您不想要的结果以及重复的结果,因为查询将单独扩展到术语中的两个单词。
如果不了解“搞笑结果”的含义,那么拍摄这张照片真的很难。