В настоящее время я делаю поисковую функцию. Позволяет говорят в моей базе данных, у меня есть эти данные:
и вводимый пользователь: "Ключ" как ключевое слово для поиска. Это - мой текущий запрос:
SELECT * FROM data WHERE (
data_string LIKE '$key%' OR
data_string LIKE '%$key%' OR
data_string LIKE '%$key'
)
В основном у меня есть 2 вопроса:
Как я сортирую по (порядок) подобие. От вышеупомянутого примера я хотел "Ключ" как свой первый результат. Мой текущий результат: Keyword1, Keyword2, Keyword3, Keysomething и Key
Мой SQL-запрос только ищет "data_string" столбцом, что, если я хочу к seach столбцу других? Сделайте я должен сделать что-то вроде этого:
SELECT * FROM data WHERE (
data_string LIKE '$key%' OR
data_string LIKE '%$key%' OR
data_string LIKE '%$key'
) OR (
data_other LIKE '$key%' OR
data_other LIKE '%$key%' OR
data_other LIKE '%$key'
) -- ...
Есть ли какой-либо лучший/быстрее запрос, чем Q2?
Я не уверен, что LIKE
- правильный способ сделать это. Если вам необходимо выполнить поиск в тексте по ключевым словам и отсортировать результаты по показателю релевантности, вы должны использовать полнотекстовый индекс MySQL и функции полнотекстового поиска MySQL . Извините, если это уводит вас от того, что вы на самом деле пытаетесь сделать, но я все же рекомендую взглянуть на это. Некоторые цитаты из справочного руководства MySQL:
1) Как создать полнотекстовый индекс для нескольких столбцов таблицы
mysql> CREATE TABLE articles (
-> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
-> title VARCHAR(200),
-> body TEXT,
-> FULLTEXT (title,body)
-> );
2) Примеры данных
mysql> INSERT INTO article (title, body) VALUES -> ('MySQL Tutorial', 'DBMS означает DataBase ...'), -> ('Как правильно использовать MySQL', 'После того, как вы прошли через ...'), -> ('Оптимизация MySQL', 'В этом руководстве мы покажем ...'), -> ('1001 трюк MySQL', '1. Никогда не запускайте mysqld от имени пользователя root. 2. ...'), -> ('MySQL против YourSQL', 'В следующем сравнении баз данных ...'), -> ('Безопасность MySQL', 'При правильной настройке MySQL ...');
3) Пример запроса, который ищет ключевые слова в нескольких столбцах и отображает результат + счет:
mysql> SELECT id, body, MATCH (title, body) AGAINST -> ('Последствия для безопасности запуска MySQL как root') Оценка AS -> ИЗ статей, ГДЕ МАТЧ (заголовок, текст) ПРОТИВ -> ('Последствия для безопасности запуска MySQL от имени пользователя root'); + ---- + ------------------------------------- + ------ ----------- + | id | тело | оценка | + ---- + ------------------------------------- + ------ ----------- + | 4 | 1. Никогда не запускайте mysqld от имени пользователя root. 2. ... | 1.5219271183014 | | 6 | При правильной настройке MySQL ... | 1.3114095926285 | + ---- + ------------------------------------- + ------ ----------- +