получить строки по значению в массиве в sql

0

У меня вопрос о поиске в MySQL. Я не мог найти ответ в течение длительного времени.

Я использую symfony 3.1, и у меня есть следующая ситуация: у меня есть столбец site_languages (longtext, (DC2Type: simple_array)) в sql со значениями (например) "0,1,7", "11,15,27" и т.д.

Поэтому мой вопрос: как я могу выбрать строку по site_languages которые включают в массив значение поиска?

Я попробовал использовать LIKE, проверил REGEXP, но, например, если мне нужен поиск по значению "1", он также вернет строки с 11/51/111 и т.д. Я думал о сохранении значений типа "[1], [15]" Но я думаю, что для этого существует более легкое и правильное решение?

  • 0
    Можете ли вы изменить дизайн вашего стола. Это не то, как вы должны делать вещи. Никогда не храните несколько значений в одном столбце !!!
  • 0
    Юрген Д, почему бы и нет? Symfony предоставляет инструменты для store array / json и других объектов, я понимаю, что могу создать новую таблицу для каждого столбца с несколькими значениями, но я думаю, что существует лучший способ для работы с сохраненными массивами.
Показать ещё 8 комментариев
Теги:
doctrine

2 ответа

0
Лучший ответ

Если вы хотите решить эту проблему с помощью регулярного выражения, вы можете использовать это регулярное выражение (^|,)1(,|$) для соответствия 1, которому предшествует запятая, а затем запятая ИЛИ ей может предшествовать 1 к началу строки или конца строки.

0

Вы должны рассмотреть нормализацию своей таблицы БД, но если вы настаиваете на ее сохранении, вы можете сохранить ее как json, затем получить все строки и выполнить итерацию (плохая идея), но это нормально, если это короткая таблица

  • 0
    этот способ более длинный, чем сохранение значений с некоторыми «триггерами» начала и конца значения, как я описал: [value1], [value2], поэтому вы можете найти его по LIKE '% [your_value]%', поэтому нет выбора и итераций на php нужно
  • 0
    Тогда вы должны сделать это правильно, таким образом, нормализуйте вашу таблицу, создав новую таблицу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню