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


PHP MySQL find, count and order results by count

我有这样的查询:

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

如何计算每行的结果数,然后根据计数对结果进行排序?

例如第1行:

标题:

Adriatic sea 的漂亮照片

正文:

这是我和我在亚得里亚海的朋友,在黑山的某个地方。Adriatic海的颜色令人惊叹。

标签:

亚得里亚海,照片

第2行:

标题:

Adriatic sea

正文:

中午

标签:

亚得里亚海,照片

有人搜索:

海上漂流照片

第1行的结果比第2行多,并且它将位于查询结果的第一位。

您可以使用两种方法。

一种是使用全文搜索,这将把你带到一个不同但非常有用的方向。在上阅读http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html.

另一种方法是在进行文本替换时使用强度-长度变化来推断:

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

当然,您可以用包含用户搜索的单词的变量来代替"Adricatic"。你会对你想为得分做出贡献的每个领域重复一遍。把分数加起来,你就得到了结果。