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 кажется единственным вариантом.

3

Решение

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

$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));

?>

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

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]