Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL按计数查找、计数和排序结果_Php_Mysql - Fatal编程技术网

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

PHP MySQL按计数查找、计数和排序结果,php,mysql,Php,Mysql,我有这样的疑问: $sql = "SELECT * FROM global_info WHERE title LIKE '%$string%' OR tag LIKE '%$string%' OR body LIKE '%$string%'"; 如何计算每行的结果数,然后根据计数对结果排序 比如说 第1行: 标题: 飘荡大海的美丽照片 正文: 这是我和我在亚得里亚海的朋友,在黑山的

我有这样的疑问:

$sql = "SELECT * 
           FROM global_info 
           WHERE title LIKE '%$string%' 
              OR tag   LIKE '%$string%' 
              OR body  LIKE '%$string%'";
如何计算每行的结果数,然后根据计数对结果排序

比如说 第1行:

标题:

飘荡大海的美丽照片

正文:

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

标签:

亚得里亚海,照片

第2行:

标题:

漂浮海

正文:

中午吃

标签:

亚得里亚海,照片

有人搜索:

亚得里亚海照片


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

您可以使用两种方法

一种是使用全文搜索,这将带你进入一个不同但非常有用的方向。请在网站上阅读

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

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

当然,您可以用包含用户搜索的单词的变量替换“'adrictic'”。你会对每个你想贡献分数的领域重复。将分数相加,您就得到了结果。

事实上,在给定的示例数据上搜索
不会得到任何结果,如“%adriatic sea photo%”
,因为显示的列中没有一列包含该精确短语。不确定是否可以在php之外(仅在sql查询中)使用php count()并检查每个类别中选择了多少个结果。最好使用全文索引并按相关分数排序。通过类似的比较,您想要的将导致可怕的查询。