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
de todos modos, es mejor que refactorice su esquema agregando una tabla de categorías y la referencia a ella en la tabla de productos (principal)
EDITAR
otra forma de enfrentar este problema es usando REGEXP
lo que conducirá a un WHERE
más corto cláusula (esto es lo que he usado para probar):
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;
esto coincidirá con su prod_catg
contra la expresión regular '^1,.*|.*,1$|.*,1,.*'
devolviendo 1 (TRUE)
si coincide, 0 (FALSE)
de lo contrario.
Entonces su cláusula WHERE se verá así:
WHERE prod_catg REGEXP '^1,.*|.*,1$|.*,1,.*'
explicación de la expresión regular:
^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
Estoy seguro de que esta expresión regular podría ser mucho más compacta, pero no soy tan bueno con las expresiones regulares
obviamente, puede cambiar la categoría que está buscando en la expresión regular (intente reemplazar 1
con 7
en el ejemplo anterior)