我需要根据单词重复使用mysql来排序结果。
这是我的示例表
id Name keywords Description
1 John John, USA John is good boy. John, John
2 Alex Alex, John Alex is a friend of john.
3 Rocky John Rocky
4 John John,John John, John, John, John, John
以“约翰”为例。在第一行中,“John”重复5次,第二行重复2次,第3行重复1次,第4行重复8次。我需要根据计数降序显示结果。
Select * From table Where name like '%John%' OR keywords like '%John%' OR Description like '%John%'
所以它将按以下顺序显示
id Name keywords Description
4 John John,John John, John, John, John, John
1 John John, USA John is good boy. John, John
2 Alex Alex, John Alex is a friend of john.
3 Rocky John Rocky
答案 0 :(得分:3)
这样可以解决问题:
SELECT id,Name,keywords,Description,
ROUND (
(
LENGTH(CONCAT(Name,keywords,Description))
-LENGTH(REPLACE( CONCAT(Name,keywords,Description), "John", "") )
) / LENGTH("John")
) AS count
FROM tbl ORDER BY `count` desc
见这里:Demo
<强>更新强>
如果你想为每条记录寻找多个(不同的)单词 你应该使用像
这样的用户定义函数(UDF)CREATE function wcnt(wrd varchar(32), str varchar(1000)) returns int
RETURN ROUND ((LENGTH(CONCAT(str))-LENGTH(REPLACE( CONCAT(str),wrd,"")))/LENGTH(wrd));
见这里:function-demo
答案 1 :(得分:0)
SELECT * FROM T
ORDER BY FIND_IN_SET('John',Description) DESC