Представим себе, что у нас есть строка с набором некоторых индексов или еще каких-то значений, разделенных разделителем. Такое может быть результатом php-фукнции implode или MySQL-фукнции GROUP_CONCAT, которые объединяют значения массива в строку через разделители. И нам надо с помощью MySQL найти в этом массиве (или не найти) некоторый элемент.
Для этого воспользуемся FIND_IN_SET. Эта функция ищет вхождение заданной строки в массив, который записан в другую строку через разделитель (запятую). К сожалению, разделитель поменять нельзя - только запятая.
Итак, приведем пример.
SELECT FIND_IN_SET('3', mytable.myset) FROM mytable
Этот запрос выведет индекс найденного значения '3' в каждой строке myset из таблицы mytable.
Давайте посмотрим исходную таблицу и результат запроса:
mytable
---
one 93,16,24
two 12,3,100
thr 3,9,12
result
---
0
2
1
Другой пример:
SELECT title FROM mytable WHERE FIND_IN_SET('3', mytable.myset)
Этот пример выведет все строки таблицы mytable, в значении myset которых имеется "3" (но не 33, не 63, и не 39).
Вот пример исходной таблицы и результата этого запроса:
mytable
---
title myset
one 93,16,24
two 12,3,100
thr 3,9,12
result
---
two
thr
Комментарии
Оставить комментарий
Базы данных - MySql (Maria DB)
Термины: Базы данных - MySql (Maria DB)