попробовать это один
SELECT notificationid,
SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(notification_to_id,','),',',value.v),',',-1) as to_id
FROM notification,(SELECT 1 as v UNION
SELECT 2 UNION
SELECT 3 UNION
SELECT 4 UNION
SELECT 5)value
HAVING to_id = '25'
sqlFiddle
Таким образом, запрос выбирает каждый элемент в поле CSV с помощью SUBSTRING_INDEX
с value.v
, который будет где-то от 1 до максимального 5 в этом случае (, заданной UNION
из SELECT 1
... SELECT 5
). Если он содержит только 3 элемента в поле csv, когда value.v
- 4 или 5, он возвращает пустую строку ''
. И having
должен возвращать строки, у которых есть 25 как элемент.
Если notification_to_id
содержит более 5 элементов, просто добавьте еще UNION
как SELECT 6
и так далее до максимального количества элементов в этой колонке.
другой способ заключается в использовании REGEX
, как показано ниже (но у вас есть много вхождений 25 заменить
SELECT notificationid,
'25' as value
FROM notification
WHERE notification_to_id REGEXP '(^25$)|(^25,)|(,25$)|(,25,)'
sqlfiddle
выше запрос будет совпадать, если 25 является единственным элементом (^ 25 $)^отмечает начало строки $ mark end of string. ИЛИ если 25 - первый элемент (^ 25,) ИЛИ если 25 - последний элемент (, 25 $) ИЛИ если 25 находится где-то посередине (, 25)
Или, если вы хотите использовать LIKE
, вы используете приведенные ниже
SELECT notificationid,
'25' as value
FROM notification
WHERE notification_to_id LIKE '25'
OR notification_to_id LIKE '25,%'
OR notification_to_id LIKE '%,25'
OR notification_to_id LIKE '%,25,%'
sqlFiddle
несколько значений в одном столбце ... те неправильную нормализацию !! каждый столбец должен быть нормализован, чтобы содержать только одно значение! – NoobEditor
@ shalini, вы имеете в виду, что хотите получить максимальное значение? – codelover
Нет, не максимальное значение Мне нужно найти конкретную строку @codelover – Thaya