Имате ли представа защо IN() не работи

Илиян

Active Member
Здравейте, опитвам се да направя една супер проста проверка в mysql и не иска да сработи, а преди съм сигурен че съм правил подобни неща и не е имало проблеми.

Да речем, че категорията има cat_users със съдържание 1,7 - искам да проверя дали потребителя 7 присъства. Опитвам с: SELECT * FROM category WHERE cat_users IN(7) и ми връща празен резултат. Опитах и обратното - WHERE 7 IN(cat_users) и пак не става. Интересното е, че ако опитам с 1, което е първата цифра, тогава работи, но със 7 не иска.

Имате ли представа къде бъркам, защото гледам разни документации и навсякъде го обясняват по същия начин. Да не би да има значение каква е колоната в таблицата - в момента е varchar?
 
IN се ползва с обратен смисъл. Демек в твоя случай няма да работи. 2рия опит не работи, защото cat_user е стринг. На теб ти е нужна колекция/лист. Демек без релация няма да минеш. category -> cat_user <- user.

ПП сетих се JSON тип колона. Може да ти свърши работа.
 
Ако cat_users съдържа само 1 категория:
SELECT * FROM category WHERE cat_users = '7'

Ако cat_users съдържа до 2 категория:
SELECT * FROM category WHERE cat_users = '7' OR cat_users LIKE '7,%' OR cat_users LIKE '%,7'

Ако cat_users съдържа само 1+ категория:
SELECT * FROM category WHERE cat_users = '7' OR cat_users LIKE '7,%' OR cat_users LIKE '%,7' OR cat_users LIKE '%,7,%'

Втория и третия вариант ще вървят бавно ако таблицата има много записи.
 
Ако cat_users съдържа само 1 категория:
SELECT * FROM category WHERE cat_users = '7'

Ако cat_users съдържа до 2 категория:
SELECT * FROM category WHERE cat_users = '7' OR cat_users LIKE '7,%' OR cat_users LIKE '%,7'

Ако cat_users съдържа само 1+ категория:
SELECT * FROM category WHERE cat_users = '7' OR cat_users LIKE '7,%' OR cat_users LIKE '%,7' OR cat_users LIKE '%,7,%'

Втория и третия вариант ще вървят бавно ако таблицата има много записи.
Долу до бутона Докладвай има дата на поста.
 

Горе