Вопрос
Может ли кто-нибудь дать мне запрос, который вернется в качестве строк результатов ID 1 и 3?
ID Name Hidden
1 Mika 1,4,2
2 Loca 0
3 Nosta 4
4 Like 2
Что-то вроде этого выбора * из таблицы, где скрыто (4)
Решение
SELECT * FROM table WHERE FIND_IN_SET('4',Hidden);
Документы для Find_in_set.
Другие советы
SELECT * FROM table WHERE CONCAT(',',Hidden,',') LIKE '%,4,%'
или вы можете избежать использования вроде этого
SELECT * FROM table WHERE INSTR(CONCAT(',',Hidden,','), ',4,') > 0
Это не получит такие вещи, как 40, 14 и т. Д., Но вам нужно убедиться, что в скрытом поле нет пробелов (например, 1, 4, 5
Или обновите Concat и как функция соответственно.
SELECT * FROM table WHERE Hidden LIKE '%4%'
% подстановочные знаки.
Полный текстовый поиск Может быть разумное решение для этого, если вы используете правильные разрывы слов.
Либо пойти с полным текстовым поиском, как предложено, или
Выключите скрытые значения в отдельную таблицу с идентификатором текущей строки.
Например, Mika будет иметь три записи в этой таблице
ID = 1, HIDDEN = 1
Id = 1, hidden = 4
Id = 1, hidden = 2
Тогда вы можете вернуть результаты против этого спинового стола.
Вы также захотите рассмотреть нормализовать таблицу и хранение этих «скрытых» значений в отдельной таблице с индексом в колонне под предплеском. В зависимости от количества строк у вас есть, это было бы намного быстрее:
ID Hidden
1 1
1 4
1 2
3 4
4 2
и:
SELECT DISTINCT table.* FROM table, hidden_table WHERE table.ID = hidden_table.ID AND hidden_table.hidden = 4