Я пытаюсь улучшить мой запрос MySQL.
SELECT gamename
FROM giveaway
WHERE gamename LIKE '$query'
Я получил вход, который состоит из URL, которые сформированы как:
Я беру название игры из URL и использую его в качестве входных данных для SQL-запроса.
Теперь в базе данных совпадающее имя иногда содержит больше символов, таких как: ‘! И т. Д.
Пример:
Таким образом, при вводе полученного имени из URL это не дает результатов для 2-го, 3-го и 4-го примера.
Поэтому я использовал символ%.
Теперь это дает результат на 1-м и 2-м примере.
.
На мой вопрос:
Мой вопрос: как лучше это улучшить, чтобы работали и 3-й, и 4-й?
Я думаю о добавлении дополнительных% до и после каждого символа:
Но я не уверен, как это повлияет на производительность и будет ли это лучшим решением для этого.
Является ли добавление% хорошим решением?
Любые другие советы о том, как сделать хороший рабочий запрос?
Прогресс:
После небольшого тестирования я обнаружил, что добавление большого количества символов подстановки (%) не очень хорошая идея. Вы получите возвращенные неожиданные результаты из базы данных, просто потому, что вы просто добавили множество способов, которые могут совпадать.
Использование метода slug кажется единственным вариантом.
Если я правильно понимаю ваш вопрос, вы создаете способ поиска по этой информации. И если это так, попробуйте
$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));
?>
Таким образом, вы добавили бы% к каждому слову в вашем запросе, что даст вам больший результат, из которого вы сможете выбирать.
Других решений пока нет …