所以我在过去的几天里一直在努力解决这个问题。我有音乐类型。由主列和辅助列分隔。 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 %%'(这会更有用。因为部分匹配会很好)
答案 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`);
希望这对您有用。