Правильный SQL запрос для сложных данных

255
07 октября 2017, 19:11

У меня в таблице есть столбец, который содержит строку типа 1,2,3,4,5 (то бишь implode обычного массива в php). Столбец называется mett Нужно каким-то образом выбрать только те записи, в которых есть хотя бы 1 элемент из заданного массива. Например если в таблице 1,2,3 а в массиве входных данных 2 4 6, то нужно вывести эту строку, т.к. число 2 есть в массиве. Как это сделать? Как разбить строку в массив, потом просмотреть есть ли элемент массива в заданном массиве? Нужно сформировать правильный select запрос. Типа select * from table where mett in ('1','2','3')

Answer 1

Массив для сравнения нужно преобразовать в набор записей. Т.е. список

в массиве входных данных 2 4 6

конвертируется в запросе в код, формирующий из этих данных таблицу:

SELECT 2 UNION ALL
SELECT 4 UNION ALL
SELECT 6

Эта таблица будет вместе с исходной источником данных запроса.

SELECT DISTINCT table.*
FROM table
   , (
        SELECT 2 x UNION ALL
        SELECT 4   UNION ALL
        SELECT 6
     ) x
WHERE FIND_IN_SET(x.x, table.mett)

Но в любом случае это плохое решение. Настоятельно рекомендую прислушаться к совету D-side и нормализовать данные.

READ ALSO
Вопросы/квадраты вместо русских букв в MySQL базе данных

Вопросы/квадраты вместо русских букв в MySQL базе данных

ЗдравствуйтеДелаю тестовый проект с аутентификацией VK на Spring MVC, вытаскиваю имя и фамилию пользователя на русском языке в переменную, а затем...

245
Получить латинскую букву по ID

Получить латинскую букву по ID

Например есть метод

219
Интерфейсы в MVP

Интерфейсы в MVP

Это наверное тысячный вопрос по MVPПеречитал очень много статей, пересмотрел многие исходники из GitHub

254
Исключение javax.net.ssl.SSLHandshakeException: Handshake failed при запросе на сервер

Исключение javax.net.ssl.SSLHandshakeException: Handshake failed при запросе на сервер

При отправке запроса вот сюда https://jsonplaceholdertypicode

365