2009-02-14 3 views
4

У меня есть таблица с именами фильмов, и я хочу, чтобы иметь возможность искать фильм в этой таблице. Но я хочу, чтобы иметь возможность искать часть названия и все равно возвращать результат. Например, если есть запись с названием «Квант утешения», то я хочу иметь возможность выполнить поиск «квантового утешения» или даже «007: квантовое утешение», и я хочу найти эту запись. Есть ли способ сделать это?поиск ключевого слова mysql

EDIT И как мне сортироваться в соответствии с совпадением? То есть, строка, которая больше всего соответствует, должна быть возвращена первой.

ответ

5

Используйте MySQL Full Text Search в булевом режиме. Если вы сделаете это при поиске «007: квантовая утечка», так как он содержит хотя бы один результат совпадения в столбце, он будет отображаться, после чего вы можете упорядочить по релевантности.

SELECT *, MATCH(title) AGAINST ('quantum solace' IN BOOLEAN MODE) AS rank 
FROM films 
WHERE MATCH(title) AGAINST ('quantum solace' IN BOOLEAN MODE) ORDER BY rank DESC 
1

Посмотрите на full text search capabilities of MySQL. После того, как вы настроите полный текстовый индекс, вы можете делать такие запросы, как этот:

SELECT * 
FROM movies 
WHERE MATCH(title) AGAINST ('quantum solace' IN BOOLEAN MODE) 
Смежные вопросы