Mysql запрос, как поиск и использование строк с символами - PullRequest
1 голос
/ 03 февраля 2012

Моя проблема в том, что в поисковом запросе используются символы. Я хочу, чтобы пользователи могли использовать символы без проблем, но функция LIKE в mysql, похоже, не является решением, поэтому мне нужна помощь.

ПРИМЕР: Если кто-то ищет "Blue's car" и "Blues car" находится в базе данных, этот запрос вернет 0 результатов. ИЛИ viseversa, если кто-то ищет "Автомобиль блюза" и "Автомобиль Блю" находится в базе данных, этот запрос также вернет 0 результатов.

Это пример того, что я сейчас использую:

("SELECT Title FROM MyData WHERE Title LIKE '%".$search."%'")

Есть ли другой способ улучшить результаты поиска?

Спасибо.

Ответы [ 4 ]

4 голосов
/ 03 февраля 2012

Поле поиска

У вас может быть дополнительное поле «поиска», в котором заголовок хранится без знаков препинания, а когда пользователь вводит строку поиска, удалите пунктуацию перед применением запроса.Вы также можете удалить начальную "The".

Я объясню выше.

В базе данных у вас есть такая запись.SearchTitle - это заголовок с удаленным начальным «и» и пунктуацией:

Title                  SearchTitle
------------------------------------------
The Blue's Clues       Blues Clues

Здесь пользователь знает точный заголовок и вводит следующую строку поиска:

The Blue's Clues

Вы удаляетеВыделение «и» и пунктуация, приводящие к следующему:

Blues Clues

Ваш запрос выглядит следующим образом

SELECT Title FROM MyData WHERE SearchTitle LIKE '%Blues Clues%'

Здесь пользователь не знает точного заголовка и вводитследующее:

Blues Clues

Снятие начальных "и" и пунктуации, по-прежнему дает одно и то же:

Blues Clues

Ваш запрос остается прежним и соответствует тому, что находится в поле поиска:

SELECT Title FROM MyData WHERE SearchTitle LIKE '%Blues Clues%'

Это может быть улучшено.Ключ заключается в применении к строке поиска тех же правил, что и к тому, что хранится в поле поиска.Например, преобразуйте «два» и «II» в «2» и т. Д., Удалите дополнительные слова, такие как «ВКЛ», «И» и т. Д.

Полнотекстовый поиск

В полнотекстовом поиске MySQL используется поиск " Natural Language ".Я не уверен, что это сработает в вашем случае, но, возможно, стоит исследовать.

0 голосов
/ 06 июня 2017

Вы можете этот термин поиска.Это очень полезно для многоколоночного поиска из MySQL

$q = htmlspecialchars($_GET["q"], ENT_QUOTES, "ISO-8859-1");
$q = stripslashes($q);
$search_exploded = explode (" ", $q);
$construct = "";

  $construct .=" CONCAT(title,' ',category,' ',subCategory,' ',description,' ',contact,' ',email,' ',website,' ',address) LIKE '%$q%' ";

foreach($search_exploded as $search_each)
{

$construct .=" OR CONCAT(title,' ',category,' ',subCategory,' ',description,' ',contact,' ',email,' ',website,' ',address) LIKE '%$search_each%' "; 

}  
$constructs ="SELECT * FROM content WHERE   active='1' AND ($construct) ";
$run = mysql_query($constructs);
$foundnum = mysql_num_rows($run);

Если вы хотите, я предоставлю больше информации

0 голосов
/ 03 февраля 2012

Передача любого пользовательского ввода непосредственно в вызов SQL делает ваш код потенциально уязвимым для атак SQL-инъекций, что представляет собой угрозу безопасности, а также то, что вы обнаружили, что оно не всегда обеспечивает ожидаемый результат.Чтобы решить эту проблему, разработчикам рекомендуется использовать подготовленные операторы или избегать входных данных [иногда называемых очисткой входных данных].Для получения дополнительной информации см. Следующее: Каков наилучший метод для очистки ввода пользователя с помощью PHP?

0 голосов
/ 03 февраля 2012

Я бы не сказал, что это обязательно лучше, но MySQL имеет поддержку регулярных выражений. REGEXP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...