PHP MySQL 按计数查找、计数和排序结果

3

我有一个查询,类似于这样:

$sql = "SELECT * 
           FROM global_info 
           WHERE title LIKE '%$string%' 
              OR tag   LIKE '%$string%' 
              OR body  LIKE '%$string%'";

如何对每一行的结果进行计数,然后根据计数排序呢?
例如: 第一行:
标题:
“美丽的亚得里亚海照片”
正文:
“这是我和我的朋友在黑山的亚得里亚海某个地方拍摄的照片。亚得里亚海的颜色非常漂亮。”
标签:
“亚得里亚海,照片”
第二行:
标题:
“亚得里亚海”
正文:
“正午时分拍摄”
标签:
“亚得里亚海,照片”
如果有人搜索:
“亚得里亚海照片”
第一行的结果比第二行的多,它将出现在查询结果的第一位。

实际上,在给定的示例数据中搜索 LIKE '%adriatic sea photo%' 将不会返回任何结果,因为显示的列中都不包含该确切短语。 - Joe Stefanelli
2
不确定除了 PHP 之外是否有可能(仅在 SQL 查询中),但您可以使用 PHP 的 count() 函数并检查每个类别选择了多少结果。 - Charles Forest
最好使用FULLTEXT索引并按相关分数排序。通过LIKE比较得到的结果将导致查询非常丑陋。 - Marc B
1个回答

1

你可以采用两种方法。

其一是使用全文搜索,这将使您进入一个不同但非常有帮助的方向。在此链接页面中了解更多:http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

另一种方法是通过进行文本替换时推断出它的强度长度变化:

(LENGTH(`body`) - LENGTH(REPLACE(`body`, 'Adricatic', '')))/LENGTH('Adricatic')

当然,你会用保存用户搜索的单词变量替换 "'Adricatic'"。而且你想要为每个需要参与评分的字段重复这些步骤。将得分相加,你就得到了结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接