MySQL запрос, который может обрабатывать пропущенные символы

Я пытаюсь улучшить мой запрос MySQL.

    SELECT gamename
    FROM giveaway
    WHERE gamename LIKE '$query'

Я получил вход, который состоит из URL, которые сформированы как:

Я беру название игры из URL и использую его в качестве входных данных для SQL-запроса.

  • $ query = "обычный взгляд"
  • $ query = "текс мерфи марсианский меморандум"
  • $ query = "flyn"
  • $ query = "Мир пингвинов"

Теперь в базе данных совпадающее имя иногда содержит больше символов, таких как: '! И т. Д.

Пример:

  • "Место посадки"
  • "Текс Мерфи: Марсианский Меморандум"
  • "Fly'N"
  • "Пингвины Арена: мир Седны!"

Таким образом, при вводе полученного имени из URL это не дает результатов для 2-го, 3-го и 4-го примера. Поэтому я использовал символ%.

  • $ query = "plain% sight"
  • $ query = "tex% murphy% martian% memorandum"
  • $ query = "flyn"
  • $ query = "пингвины% арена% седны% мир"

Теперь это дает результат на 1-м и 2-м примере.

,

На мой вопрос:

Мой вопрос: как лучше это улучшить, чтобы работали и 3-й, и 4-й?

Я думаю о добавлении дополнительных% до и после каждого символа:

  • $ query = "% f% l% y% n%"
  • $ query = "% p% e% n% g% u% i% n% s% a% r% e% n% a% s% e% d% n% a% s% w% o% r% l % d%"

Но я не уверен, как это повлияет на производительность, и если это лучшее решение для этого.

Является ли добавление% хорошим решением?

Любые другие советы о том, как сделать хороший рабочий запрос?

Прогресс:

После небольшого тестирования я обнаружил, что добавление большого количества символов подстановки (%) не очень хорошая идея. Вы получите возвращенные неожиданные результаты из базы данных, просто потому, что вы просто добавили множество способов, которые могут совпадать.

Использование метода slug кажется единственным вариантом.

1 ответ

Если я правильно понимаю ваш вопрос, вы создаете способ поиска по этой информации. И если это так, попробуйте

$query = addslashes($query);


SELECT name
    FROM giveaway
    WHERE gamename LIKE '%$query%'

Теперь, если вы хотите расширить свой поиск и искать каждое отдельное слово, которое выглядит как слова в вашей строке, то вы можете разбить текст и искать каждое слово, выполнив

<?php
$query = addslashes($query);

//We explode the query into a table
$tableau=explode(' ',$query);

$compter_tableau=count($tableau);

//We prepare the query
$req_search = "SELECT name FROM giveaway WHERE  ";

//we add the percentage sign and the combine each query 
for ($i = 0; $i < $compter_tableau; $i++) 
{
$notremotchercher=$tableau["$i"];

if($i==$compter_tableau) { $liaison="AND"; } else { $liaison=""; }

if($i!=0) { $debutliaison="AND"; } else { $debutliaison=""; }

$req_search .= "$debutliaison gamename  LIKE '%$notremotchercher%' $liaison ";
}

//Now you lauch your query here
$selection=mysqli_query($link, "$req_search") or die(mysqli_error($link)); 

?>

Тем самым вы добавили бы% к каждому слову в вашем запросе, что даст вам больший результат, из которого вы сможете выбирать.

Другие вопросы по тегам