我正在尝试创建一个搜索功能,用户可以在其中输入两个单词到文本字段,它将拆分单词并构造一个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它构造并运行查询,但返回有趣的结果。
任何帮助都将不胜感激。
发布于 2011-11-05 00:00:54
LIMIT的东西,所以你不需要最后一行。发布于 2011-11-05 00:13:20
如果您的数据库采用MyISAM表格式,则可以对Sn0opy已经提到的感兴趣的列进行全文搜索
我个人认为,如果你真的想创建一个优秀的搜索引擎,使用mySQL (http://sphinxsearch.com/)或Solr (http://lucene.apache.org/solr/)就可以了。
它们可能都有一个学习曲线,但结果是专业的。
发布于 2011-11-05 00:17:08
还有比“有趣的结果”更具体的东西吗?即兴有几种可能性,但这真的取决于返回的结果。我的PHP有点生疏了,所以如果我的大脑抛出了一些java规则,我会在前面道歉,但第一眼看起来……
将该数组命名为$search以外的其他名称。这可能不是问题所在,但是由explode()创建的数组带有要分解的字符串的名称,这看起来很奇怪。尝试类似$searched = explode(“",$search);的命令,然后在随后的foreach()循环中使用$searched。
如果用户只输入一个搜索词怎么办?如果$text_field中没有空格,则explode将返回一个空数组,这将彻底提升您的查询。在分解$search之前,至少应该验证$text_field中是否有空格。同样,如果用户输入两个搜索词,但其中一个搜索词是由空格分隔的两个单词,该怎么办?同样,您将获得“有趣的结果”,因为您将获得您不想要的结果以及重复的结果,因为查询将自身扩展到一个术语中的两个单词。
如果不知道你所说的“有趣的结果”是什么意思,就真的很难解决这个问题。
https://stackoverflow.com/questions/8012133
复制相似问题