MySQL запрос, который может обрабатывать пропущенные символы
Я пытаюсь улучшить мой запрос MySQL.
SELECT gamename
FROM giveaway
WHERE gamename LIKE '$query'
Я получил вход, который состоит из URL, которые сформированы как:
- http://www.steamgifts.com/giveaway/l7Jlj/plain-sight
- http://www.steamgifts.com/giveaway/okjzc/tex-murphy-martian-memorandum
- http://www.steamgifts.com/giveaway/RqIqD/flyn
- http://www.steamgifts.com/giveaway/FzJBC/penguins-arena-sednas-world
Я беру название игры из 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));
?>
Тем самым вы добавили бы% к каждому слову в вашем запросе, что даст вам больший результат, из которого вы сможете выбирать.