MySQL sort by number of occurrences

前端 未结 3 1466
遥遥无期
遥遥无期 2021-02-09 15:28

I am doing a search in two text fields called Subject and Text for a specific keyword. To do this I use the LIKE statement. I have encount

3条回答
  •  遥遥无期
    2021-02-09 15:53

    Below query can give you the no.of occurrences of string appears in both columns i.e text and subject and will sort results by the criteria but this will not be a good solution performance wise its better to sort the results in your application code level

    SELECT *,
    (LENGTH(`Text`) - LENGTH(REPLACE(`Text`, 'Keyword', ''))) / LENGTH('Keyword')
    +
    (LENGTH(`Subject`) - LENGTH(REPLACE(`Subject`, 'Keyword', ''))) / LENGTH('Keyword') `occurences`
     FROM 
    `Table`
     WHERE (Text LIKE '%Keyword%' OR Subject LIKE '%Keyword%')
    ORDER BY `occurences`  DESC
    

    Fiddle Demo

    Suggested by @lserni a more cleaner way of calculation of occurrences

    SELECT *,
    (LENGTH(`Text`) - LENGTH(REPLACE(`Text`, 'test', ''))) / LENGTH('test') `appears_in_text`,
    
    (LENGTH(`Subject`) - LENGTH(REPLACE(`Subject`, 'test', ''))) / LENGTH('test') `appears_in_subject`,
    
    (LENGTH(CONCAT(`Text`,' ',`Subject`)) - LENGTH(REPLACE(CONCAT(`Text`,' ',`Subject`), 'test', ''))) / LENGTH('test') `occurences`
     FROM 
    `Table1`
     WHERE (TEXT LIKE '%test%' OR SUBJECT LIKE '%test%')
    ORDER BY `occurences`  DESC
    

    Fiddle Demo 2

提交回复
热议问题