Я ищу некоторую помощь с подсчетом количества вхождений в нескольких строках mysql db. Целью является создание поисковой системы, такой как google, но только для моего сайта
схема должна отображать запись, которая имеет наибольшее количество вхождений слова в самом верхнем
например. пользователь выполняет поиск ключа слова. Искаются записи и данные отображаются в порядке количества вхождений
1.this is a key which is a test key and also the profile key (3 occurences) 2.key give me a key (2 occurences) ....and so on...
это лучший подход?
SELECT (LENGTH(daya) - LENGTH(REPLACE(data, 'key', ''))) / LENGTH('key') AS `count` ORDER BY `count` DESC // data is the column name and key is the word
или есть лучший
Примечание: я не хочу использовать Like % %
. также я хочу показать количество раз, когда слово произошло, так the word key has occured 3 times
Могу ли я использовать count()
Вы можете добавить счет в предложение ORDER BY
.
Попробуйте так:
SELECT *,(LENGTH(data) - LENGTH(REPLACE(data, 'key', ''))) / LENGTH('key') as cnt FROM TableName ORDER BY ((LENGTH(data) - LENGTH(REPLACE(data, 'key', ''))) / LENGTH('key')) DESC
Чтобы получить записи из 2 вступлений, вы можете использовать предложение HAVING
:
SELECT *,(LENGTH(data) - LENGTH(REPLACE(data, 'key', ''))) / LENGTH('key') as cnt FROM TableName HAVING cnt=2 ORDER BY ((LENGTH(data) - LENGTH(REPLACE(data, 'key', ''))) / LENGTH('key')) DESC
Ваш подход прекрасен, но вы можете обойтись без разделения с помощью одного персонажа более или менее:
SELECT (LENGTH(REPLACE(data, 'key', 'key1')) - LENGTH(data)) as `count` FROM table t ORDER BY `count` DESC // data is the column name and key is the word
Если вы хотите, чтобы значения отображались «n» раз, использование может использовать предложение having
в MySQL:
SELECT (LENGTH(REPLACE(data, 'key', 'key1')) - LENGTH(data)) as `count` FROM table t HAVING `count` = 2 ORDER BY `count` DESC // data is the column name and key is the word
Это использование предложения having
является расширением MySQL и не будет работать в других базах данных.