Выдача результата в порядке количества совпадений

outluch

Новичок
Выдача результата в порядке количества совпадений

Имеется таблица files с полями `name`, `size`, `link`. Таблица отсортирована по полю `name` в алфавитном порядке. Есть несколько слов (из строки поиска на сайте). Нужно создать такой запрос, чтобы субд возвращала строки, поле `name` которых содержало хотя бы одно из слов запроса, при чем результат должен быть сортирован по количеству совпадений (сначала те строки, у которых больше совпадений со словами запроса). Как это все сделать только средствами mysql? Как можно учитывать количество совпадений запроса, и сортировать по нему?
 

outluch

Новичок
Все дело в том, что fulltext search ищет только по отдельным словам (через пробел). А в моей таблице имена файлов, которые чаще всего записаны без пробелов. Вобщем я нашел такое решение:
PHP:
SQL-запрос: 
SELECT `name` , 
IF (LOCATE( 'a', `name` ) , 1, 0) AS match1, 
IF (LOCATE( 't', `name` ) , 1, 0) AS match2
FROM `files` 
WHERE 
name LIKE "%a%"
OR name LIKE "%t%"
ORDER BY `match1` DESC , `match2` DESC
Как вам такое решение? Возможно ли сделать оптимальнее, лаконичнее?
 

Necromant

Новичок
Тебе уже дали ссылку like %a% приведет к просмотру всей таблицы и исключает использование индексов.
 

outluch

Новичок
Еще раз : Все дело в том, что fulltext search ищет только по отдельным словам (через пробел). А в моей таблице имена файлов, которые чаще всего записаны без пробелов.
 

Necromant

Новичок
To override the default stopword list, set the ft_stopword_file system variable. (See Section 5.2.2, “Server System Variables”.) The variable value should be the pathname of the file containing the stopword list[\B], or the empty string to disable stopword filtering. After changing the value of this variable or the contents of the stopword file, restart the server and rebuild your FULLTEXT indexes.

RTFM: http://dev.mysql.com/doc/refman/5.0/en/fulltext-fine-tuning.html
 
Сверху