sql >> Database >  >> RDS >> Mysql

MySQL sorteren op aantal keren

Onderstaande query kan u het aantal keren dat string voorkomt in beide kolommen, d.w.z. tekst en onderwerp, en zal de resultaten sorteren op de criteria, maar dit zal geen goede oplossing zijn qua prestaties, het is beter om de resultaten op uw applicatiecodeniveau te sorteren

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

Voorgesteld door @lserni een schonere manier om voorvallen te berekenen

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



  1. Hoe bescherm ik mijn forum tegen spam?

  2. Verwerk utf-8-gegevens van MySQL in C++ en geef het resultaat terug

  3. Meerdere MySQL-tabelkolommen bijwerken met behulp van arrays met PDO

  4. Sluit me aan bij Special Guest Michal Bar van het MS Access-team!