Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL sortiert nach Anzahl der Vorkommen

Die folgende Abfrage kann Ihnen die Anzahl der Vorkommen von Zeichenfolgen in beiden Spalten anzeigen, d. H. Text und Betreff, und die Ergebnisse nach den Kriterien sortieren, aber dies ist keine gute Lösung in Bezug auf die Leistung. Es ist besser, die Ergebnisse in Ihrer Anwendungscodeebene zu sortieren. P>

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

Vorgeschlagen von @lserni eine sauberere Methode zur Berechnung von Ereignissen

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