sql >> Databáze >  >> RDS >> Mysql

MySQL třídit podle počtu výskytů

Níže uvedený dotaz vám může poskytnout počet výskytů řetězce, který se objeví v obou sloupcích, tj. text a předmět, a seřadí výsledky podle kritérií, ale nebude to dobré řešení, pokud jde o výkon, protože je lepší seřadit výsledky na úrovni kódu vaší aplikace

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

Ukázka houslí

Navrhl @lserni čistší způsob výpočtu výskytů

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. balíček selhává – nelze najít klientskou knihovnu PostgreSQL (libpq)

  2. Převést z RAW (16) Oracle na GUID .NET

  3. Urychlete operace hromadného vkládání pomocí NHibernate

  4. SQL:AKTUALIZACE z komplexního výběru