prod_catg LIKE '1,%' --matches when 1 is the first category
OR prod_catg LIKE '%,1,%' --matches when 1 is somewhere in the middle
OR prod_catg LIKE '%,1' --matches 1 when is the last category
така или иначе е по-добре да преработите схемата си, като добавите таблица с категории и препратка към нея в продуктовата (основната) таблица
РЕДАКТИРАНЕ
друг начин за справяне с този проблем е използването на REGEXP
което ще доведе до по-кратък WHERE
клауза (ето какво използвах за тестване):
DECLARE @regexp VARCHAR(100);
SET @regexp = '^1,.*|.*,1$|.*,1,.*';
SELECT
'1,11,15,51,22,31' REGEXP @regexp AS test1,
'51,11,15,1,22,31' REGEXP @regexp AS test2,
'11,15,51,22,31,1' REGEXP @regexp AS test3,
'7,11,15,51,22,31' REGEXP @regexp AS test4,
'51,11,15,7,22,31' REGEXP @regexp AS test5,
'11,15,51,22,31,7' REGEXP @regexp AS test6;
това ще съответства на вашия prod_catg
срещу регулярния израз '^1,.*|.*,1$|.*,1,.*'
returnig 1 (TRUE)
ако съвпада, 0 (FALSE)
иначе.
Тогава вашата клауза WHERE ще изглежда така:
WHERE prod_catg REGEXP '^1,.*|.*,1$|.*,1,.*'
обяснение на regexp:
^1,.* --matches 1 at the beginning of a string followed by a `,` and any other char
.*,1$ --matches 1 at the end of a string preceded by a `,` and any other char
.*,1,.* --matches 1 between two `,` which are sourrounded by any other chars
| --is the OR operator
Сигурен съм, че този регулярен израз може да бъде много по-компактен, но не съм толкова добър с регулярните изрази
очевидно можете да промените категорията, която търсите в регулярния израз (опитайте да замените 1
с 7
в примера по-горе)