Если я вас правильно понимаю (я все еще не уверен, что понимаю), вы можете просто использовать:
SELECT * FROM table WHERE column LIKE '%1_2_3%';
Это даст вам столбцы, в которых значение равно:
1_2_3_4_5_5
1_4_5_, 1_2_3_4_5_, 6_7
и т. Д.
Но вы должны действительно нормализовать ваши таблицы. Это важно для хороших запросов и производительности, а также важно.
В соответствии с предложениями @Xatenev, если вам действительно нравятся только значения и строки каждой подходящей строки, это не сработает так хорошо и будет очень затратно. Вот шаги, которые я бы выполнил:
- Разделить все столбцы CSV на несколько строк (это взлом и убийца производительности, я нашел какое-то рабочее решение, но не тестировал его, см. здесь ): псевдокод:
SELECT ID, SPLIT(',', column) AS entries FROM table
(НЕ РАБОТАЕТ )
- Отфильтруйте новую виртуальную таблицу, чтобы выбрать только строки, соответствующие префиксу (
SELECT * FROM virtual_table WHERE find_in_set("1_2_3%, entries) ORDER BY ID
)
- Объединить соответствующие
entries
обратно в список для каждого ID
. например SELECT ID, GROUP_CONCAT(entries SEPARATOR ', ') FROM filtered_table GROUP BY ID
- Сделай что-нибудь
Неизвестная часть - начало с разделения на несколько строк. Существует множество возможных решений со своими недостатками или преимуществами. Имейте в виду, что это всегда (независимо от выбранного метода) будет стоить много производительности.
ДОПОЛНИТЕЛЬНОЕ УЗЕЛ:
В вашей ситуации могут быть приключения, когда каждая строка соответствует вашей строке поиска, как в моем первом примере, и фильтруется в памяти. Это может быть быстрее, чем в MYSQL.