我正在尝试创建一个搜索系统,但问题是我想破坏输入字符串并使用php的explode()函数将其爆炸,然后搜索表格的标题和描述列中的每个关键字。这是我为单一查询搜索所做的事情
$result = mysql_query("SELECT `name`
FROM texts
WHERE (title LIKE '%".$query."%' OR description LIKE '%".$query."%' ) ")
or die (mysql_error());
现在的问题是我将查询编写为
$query_search = explode(" ",$query);
现在关键字的数量是未知的,如果标题中存在所有关键字或描述中存在所有关键字,我想找到它。 请帮帮我。
这是我试过的
$query_string_title = NULL ;
$query_string_desc = NULL ;
for($i = 0 ; $i< count($query_search) ; $i++){
if($i == 0){
$query_string_title .= "LIKE '%".$query_search[$i]."%'";
$query_string_desc .= "LIKE '%".$query_search[$i]."%'";
}
else{
$query_string_title .= "AND ad_title LIKE '%".$query_search[$i]."%'";
$query_string_desc .= "AND description LIKE '%".$query_search[$i]."%'";
}
}
$result = mysql_query("SELECT `name` FROM texts
WHERE (ad_title ".$query_string_title."
OR description ".$query_string_desc.")
or die (mysql_error());
答案 0 :(得分:0)
我认为你要做的事情可以这样做:
$string = "foo john doe";
$where = 'WHERE ('. implode(') OR (',
array_map(
function ($word)
{
return 'title LIKE \'%'. $word .'%\' OR description LIKE \'%'. $word .'%\'';
},
explode(" ", $string))
) .')';
$query = "SELECT `name` FROM texts $where";
var_dump($query);
如果它似乎不是解决您问题的理想方式,请查看其他人已经提及的FULLTEXT搜索。
祝你好运:)编辑1:
如果您收到错误,也许您使用的是旧版本的php,请尝试:
function array_map_helper ($word)
{
return 'title LIKE \'%'. $word .'%\' OR description LIKE \'%'. $word .'%\'';
}
$string = "foo john doe";
$where = 'WHERE ('. implode(') OR (', array_map('array_map_helper', explode(" ", $string)) ) .')';
$query = "SELECT `name` FROM texts $where";
var_dump($query);