sql >> Base de Datos >  >> RDS >> Mysql

MySQL ordenar por número de ocurrencias

La consulta a continuación puede brindarle el número de ocurrencias de la cadena que aparece en ambas columnas, es decir, texto y asunto, y ordenará los resultados según los criterios, pero esta no será una buena solución en cuanto al rendimiento, es mejor ordenar los resultados en el nivel de código de su aplicación

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

Demostración de violín

Sugerido por @lserni una forma más limpia de cálculo de ocurrencias

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

Demostración de violín 2