按mysql中的特定字数排序

时间:2015-08-18 05:55:14

标签: php mysql

我需要根据单词重复使用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

2 个答案:

答案 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

或此处为combination of the first query with the UDF

答案 1 :(得分:0)

SELECT * FROM T 
ORDER BY FIND_IN_SET('John',Description) DESC

FIDDLE