Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL сортиране по брой събития

Заявката по-долу може да ви даде броя на срещанията на низ, който се появява и в двете колони, т.е. текст и тема, и ще сортира резултатите по критериите, но това няма да е добро решение по отношение на производителността, по-добре е да сортирате резултатите на ниво код на вашето приложение

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

Предложено от @lserni по-изчистен начин за изчисляване на събития

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 2



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете стойността на полето за повторител на разширени персонализирани полета въз основа на друга стойност на повторителя

  2. Минимални нива на достъп за изпълнение на съхранената процедура на MySql

  3. Как да направите обратен инженеринг на база данни в MySQL Workbench

  4. Разлика в производителността на Native SQL (използвайки MySQL) спрямо използването на Hibernate ORM?

  5. Нов драйвер за MySQL причинява java.sql.SQLNonTransientConnectionException:изисква се CLIENT_PLUGIN_AUTH