#php #mysql #html
#php #mysql #HTML
Вопрос:
У меня есть скрипт поиска на PHP, который выполняет поиск в базе данных MySQL для ответов на вопросы. В настоящее время моя база данных представлена следующим образом…
вопрос
id = который час
ответ = Время 12:00
Затем эти данные отправляются в мой PHP-код:
<?php
mysql_connect("localhost","username","password");
mysql_select_db("database");
if(!empty($_GET['q'])){
$query=mysql_real_escape_string(trim($_GET['q']));
$searchSQL="SELECT * FROM questions WHERE `question` LIKE '%{$query}%' LIMIT 1";
$searchResult=mysql_query($searchSQL);
while($row=mysql_fetch_assoc($searchResult)){
$results="{$row['answer']}";
}
echo $results;
}
?>
В настоящее время запрос пользователя должен содержать точно такой же текст, что и поле вопроса. Мой вопрос; как я могу заставить это работать, чтобы оно запускало определенное значение для нескольких ключевых слов?
Я надеюсь, вы сможете понять мой вопрос
Комментарии:
1. Не могли бы вы привести пример того, с какими ключевыми словами вы хотели бы сопоставить конкретный вопрос?
2. Я думаю, что такого рода обработка естественного языка выходит за рамки вопросов и ответов SO.
Ответ №1:
Я думаю, что полный индекс тестового поиска может помочьhttp://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html Функция SOUNDEX также может быть полезна в этом контексте. Вы можете разделить запрос на ключевые слова и сгенерировать динамический SQL, но это неэффективно (проблемы с производительностью при атаках с использованием SQL-инъекций) см.http://php.net/manual/en/function.split.php
Альтернативой является добавление таблицы QUESTION_KEYWORD (QUESTION_ID, КЛЮЧЕВОЕ СЛОВО), разделение вопроса и поиск по этой таблице, чтобы найти лучший QUESTION_ID, но полнотекстовый поиск по индексу более эффективен. Фактически индекс полнотекстового поиска использует аналогичную структуру данных для оптимизации тестового поиска.
Ответ №2:
Для простого быстрого исправления на основе вашего комментария вы могли бы сделать что-то столь же простое, как это:
// Assuming query string is ?q=make,sponge,cake
$searchSQL="SELECT * FROM questions WHERE ";
$count = 0;
foreach (explode(',', $_GET['q']) as $query) {
$searchSQL .= "`question` LIKE '%" .mysql_real_escape_string(trim($query)) . "%' ";
if ($count > 0) {
$searchSQL .= ' OR ';
}
}
$searchSQL .= ' LIMIT 1';
$searchResult = mysql_query($searchSQL);
Комментарии:
1. Вы могли бы просто обратить процесс вспять, т. Е.
q=how,to,make,a,sponge,cake
, если можно быть свободным в подборе (использованииOR
), тогда это сработало бы. Если вы хотите выборочныйAND
, то, боюсь, это больше похоже на обработку естественного языка, как указано выше