使用php在数据库表中搜索多个关键字
我正在尝试创建一个搜索系统,但问题是我想打断输入字符串,并使用php的explode()函数将其分解,然后在表的title和description列中搜索每个关键字。。下面是我为单一查询搜索所做的使用php在数据库表中搜索多个关键字,php,mysql,Php,Mysql,我正在尝试创建一个搜索系统,但问题是我想打断输入字符串,并使用php的explode()函数将其分解,然后在表的title和description列中搜索每个关键字。。下面是我为单一查询搜索所做的 $result = mysql_query("SELECT `name` FROM texts WHERE (title LIKE '%".$query."%' OR description LIKE '%".$query."%' ) ")
$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());
$query\u string\u title=NULL;
$query\u string\u desc=NULL;
对于($i=0;$i
我想你想做的事情可以这样做:
$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);
然而,这似乎不是解决问题的理想方法,看看其他人已经提到的全文搜索
祝你好运:)
编辑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);
设置并使用全文。只需稍加搜索,您就可以轻松回答自己的问题。只需记住
explode()
函数返回一个数组,所以问问自己有哪些数组
函数可能会有帮助?使用您最喜欢的搜索引擎,如果您仍然无法返回,请告诉我们您尝试了什么,您可能会得到一些help@LawrenceCherone建议使用MySQL全文搜索。这是一种在MySQL列中搜索关键字的方案就像“%keyword%”
方法永远注定是缓慢的,即使你能正确地工作,这是不合理的困难。也许你使用的是旧版本的php,请参阅我的编辑。这两种方法都适用于我的php 5.3.8