san_jorich
@san_jorich
Творческий кодер

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

Есть таблица: media_tags(`media_tag`, `media_ids`) в которой media_ids - строка типа 1,2,3,10 итд..
Есть пришедшая переменная $media_id
Как составить запрос, чтоб вытащить все `media_tag`_и, строка `media_ids` которых содержит значение $media_id ?
Для примера:
media_tag 1 | media_ids 1,2,3,5
media_tag 2 | media_ids 4,6,8,10
media_tag 3 | media_ids 2,9,10,11
Как вытащить tag_2 и tag_3 если, скажем, media_id = 10

---
Я, конечно, предполагаю что можно через занесение всех ids в массив и сравнению с массивом.. но на сколько это правильно и продуктивно если media_tag_ов может быть и 100 и 10'000 (over много).. ?
Это же нужно составить циклом столько массивов и сравнивать сравнвать.. Может есть более оптимизированный способ, или функция?
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
@BorisKorobkov Куратор тега PHP
Web developer
Вариант 1 (говнокод):
... WHERE CONCAT(',', media_ids, ',') LIKE '%,10,%'


Вариант 2 (правильный):
Хранить media_id в поле int (в отдельной таблице) или int[] (в этой же таблице, но только для PostgreSQL)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
qonand
@qonand
Software Engineer
Как составить запрос, чтоб вытащить все `media_tag`_и, строка `media_ids` которых содержит значение $media_id ?

Привести базу в порядок и не хранить массив идентификаторов в виде строки
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы