Вопрос

Может ли кто-нибудь дать мне запрос, который вернется в качестве строк результатов 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top