Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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
mysql按唯一单词匹配量排序_Mysql_Sql Order By - Fatal编程技术网

mysql按唯一单词匹配量排序

mysql按唯一单词匹配量排序,mysql,sql-order-by,Mysql,Sql Order By,我发现很多问题都需要大量的回答,但没有一个问题的回答和我想做的完全一样 动态生成的(准备好的语句)查询将产生如下结果: SELECT * FROM products WHERE ( title LIKE ? AND title LIKE ? ) AND ( content LIKE ? OR content LIKE ? ) AND ( subtitle LIKE ? AND author LIKE ? ) ORDER BY relevance LIMIT ?,? 输入的字数(以及类似于

我发现很多问题都需要大量的回答,但没有一个问题的回答和我想做的完全一样

动态生成的(准备好的语句)查询将产生如下结果:

SELECT * FROM products WHERE 
( title LIKE ? AND title LIKE ? ) AND 
( content LIKE ? OR content LIKE ? ) AND 
( subtitle LIKE ? AND author LIKE ? )
ORDER BY relevance LIMIT ?,?
输入的字数(以及类似于的
的字数)用于标题、内容和作者(取决于搜索查询)

现在我添加了一个按相关性排序的
。但我希望这个顺序是内容字段中匹配的唯一单词的数量。(注意:不取决于出现的数量,而是取决于在
内容
列中至少有一个匹配项的输入字符串的数量)

示例表
产品

id | title   | subtitle  | content
------------------------------------
1  | animals | cat       | swim swim swim swim swim swim swim
2  | canimal | fish      | some content
3  | food    | roasted   | some content
4  | animal  | cat       | swim better better swims better something else
5  | animal  | cat       | dogs swim better
查询示例(填写准备好的语句):

预期结果(按正确顺序!):

我有一个Innodb表和低于5.6的mysql版本,因此我不能对
使用
MATCH。

我想这可以用
解决,当这个案例。。。然后
。但我不知道如何创建此排序。

例如,您可以通过多种方式进行排序

ORDER BY SIGN(LOCATE('dog',content))+
         SIGN(LOCATE('swim',content))+
         SIGN(LOCATE('better',content)) DESC

还是用箱子

ORDER BY 
CASE WHEN content LIKE '%dog%' 
        THEN 1
        ELSE 0
END
+
CASE WHEN content LIKE '%swim%' 
        THEN 1
        ELSE 0
END
+
CASE WHEN content LIKE '%better%' 
        THEN 1
        ELSE 0
END

DESC
像这样检查

    SELECT id,CONCAT_WS('-',COUNT(LENGTH(content) - LENGTH(REPLACE(content, ' ', '')) + 1),REPLACE(content,' ',',')) AS amount of matches FROM products 
        WHERE 
        ( title LIKE %animal% ) AND 
        ( content LIKE %dog% OR content LIKE %swim% OR content LIKE %better% ) AND 
        ( subtitle LIKE %cat% )
        GROUP BY id
ORDER BY id

性能方面有什么不同吗?如果我希望添加所有已找到行的计数(*)(用于分页),是否可能?这取决于。。。我认为第二种方法会更快。同样的结果是:我可能会使用第二种方法,因为符号已经附加到单词中,所以我不能使用第一种方法。我可以写的情况下,内容喜欢吗?(准备好的报表)?是否必须添加其他0?
ORDER BY 
CASE WHEN content LIKE '%dog%' 
        THEN 1
        ELSE 0
END
+
CASE WHEN content LIKE '%swim%' 
        THEN 1
        ELSE 0
END
+
CASE WHEN content LIKE '%better%' 
        THEN 1
        ELSE 0
END

DESC
    SELECT id,CONCAT_WS('-',COUNT(LENGTH(content) - LENGTH(REPLACE(content, ' ', '')) + 1),REPLACE(content,' ',',')) AS amount of matches FROM products 
        WHERE 
        ( title LIKE %animal% ) AND 
        ( content LIKE %dog% OR content LIKE %swim% OR content LIKE %better% ) AND 
        ( subtitle LIKE %cat% )
        GROUP BY id
ORDER BY id