@photosho

Как реализовать частичный поиск по строке?

Здравствуйте. Появилась вдруг необходимость сделать в одном из проектов страницу отображения статей по определенным тегам. Теги передаются в строке поиска при помощи GET-параметра и выглядят следующим образом:

site/topics?tags=0,3,5


То есть, их числовые значения. В базе данных они записаны именно так. Поиск делаю следующим образом:

Topic::where('tags', 'LIKE', '%' . $tags . '%')->get(...)...;


Теперь о проблеме. Если ищу статьи по тегам 0,5, а в базе данных для статьи указана строка 0,3,5 (то есть, между 0 и 5 есть еще значение), то эта статья в финальную выборку не попадает. То есть, поиск идет по полной строке. Как реализовать частичный поиск по строке, чтобы MySQL учитывал все входящие в нее теги, невзирая на их порядок?
  • Вопрос задан
  • 261 просмотр
Решения вопроса 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
1. Или менять на json колонку в базе и минимальный тогда будет mysql 5.5
2. или выбирать все статьи возвращая две колонки: ID-статьи и ID-тегов с нужной сортировкой (и/или ограниченным количеством/диапазоном) и дальше отсеивать уже циклом на стороне PHP, после - селектить на основе отобранных ID-статей контент для вывода.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
DJZT
@DJZT
Laravel - code for you
У вас не правильно хранятся теги. Необходимо заводить 3ю таблицу для хранения соответствия статьи и тегов. А теги хранить в отдельной таблице. Тогда повышается гибкость и такой проблемы не возникнет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы