【发布时间】:2020-09-08 19:18:07
【问题描述】:
所以过去几天我一直在努力解决这个问题。我有音乐流派。由主要和次要列分开。摇滚/前卫摇滚等。我有它,所以它会搜索一列,很好。但我希望它搜索任一列。在谷歌上搜索帮助。我发现理论上 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%%'(这会更有用。因为部分匹配会很好)
【问题讨论】:
-
它返回什么错误?像在phpmyadmin中一样直接在mysql上尝试查询,尝试使用
mysql_fetch_array -
错误:警告:mysql_fetch_object():提供的参数不是第 29 行 C:\Web Pages\PHP\GenreTest.php 中的有效 MySQL 结果资源 []
-
第 29 行:while($obj = mysql_fetch_object($rs)) {
-
直接在 mysql 上尝试查询,如在 phpmyadmin 中直接在 mysql 上尝试查询,如在 phpmyadmin 中,它返回什么?试试这样的
SELECT *, MATCH(title, content) AGAINST('". $term ."') FROM pages -
我没有意识到我可以尝试一下.. 让我检查一下.. 等一下。
标签: php mysql full-text-search