FULLTEXT在MySQL中搜索多个列?

时间:2012-02-02 18:00:44

标签: php mysql full-text-search

所以我在过去的几天里一直在努力解决这个问题。我有音乐类型。由主列和辅助列分隔。 Rock / Progressive rock等等我已经拥有它所以它会搜索一列,就好了。但是我想要搜索任一列。在谷歌上寻求帮助。我发现理论上的FULLTEXT搜索应该这样做。我在主列和辅助列上设置了FULLTEXT索引。但是我无法使其正常工作。

这是我的代码,适用于单列:

    $query = sprintf("SELECT * FROM musicgenres WHERE secondary LIKE '%%%s%%' LIMIT 20", mysql_real_escape_string($_GET["q"]));

$arr = array();
$rs = mysql_query($query);

while($obj = mysql_fetch_object($rs)) {
    $arr[] = $obj;
}

$json_response = json_encode($arr);

if($_GET["callback"]) {
    $json_response = $_GET["callback"] . "(" . $json_response . ")";
}


$final = str_replace(genre_id, id, $json_response);
echo $final;

(以JSON格式返回结果)

我试过按照本教程我已经发现这是一个例子:

 $term = "Search Term";

    $sql = "SELECT *, MATCH(title, content) AGAINST('". $term ."') as score FROM pages WHERE MATCH (title, content) AGAINST('". $term ."') ORDER BY score DESC";
    $query = mysql_query($sql);

问题似乎是在SELECT查询中。或当我结合它。它会导致此行出错:

while($obj = mysql_fetch_object($rs)) {

我尝试的最新Select查询是:

$term = mysql_real_escape_string($_GET["q"]);

$sql = "SELECT *, MATCH(primary, secondary) AGAINST('". $term ."') as score FROM musicgenres WHERE MATCH (primary, secondary) AGAINST('". $term ."') ORDER BY score DESC";

我也尝试过:LIKE'%%% s %%'(这会更有用。因为部分匹配会很好)

3 个答案:

答案 0 :(得分:2)

我不是100%确定你在寻找什么,但是如果你想搜索多个列,这样的东西应该有效:

"SELECT * FROM musicgenres WHERE secondary LIKE '%%%s%%' OR primary LIKE '%%%s%%' LIMIT 20"

希望接近你想要的东西。

答案 1 :(得分:0)

好的尝试此查询

SELECT column1, column2, ..., MATCH(primary, secondary) AGAINST('". $term ."') as score 
FROM musicgenres 
WHERE MATCH (primary, secondary) AGAINST('". $term ."') 
ORDER BY score DESC"

如果不起作用,请尝试从select子句

中删除对()的match()
SELECT column1, column2, ... FROM .... 

答案 2 :(得分:0)

也许您想添加索引以包围要搜索的列:

String
ALTER TABLE `table` 
ADD FULLTEXT `fulltext_idxAll` (`column1`, `column2`,`column3`);

希望这对您有用。