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
comunque faresti meglio a rifattorizzare il tuo schema aggiungendo una tabella di categoria e il riferimento ad essa nella tabella del prodotto (principale)
MODIFICA
un altro modo per affrontare questo problema è usare REGEXP
che porterà a un WHERE
più breve clausola (ecco cosa ho usato per testare):
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;
questo corrisponderà al tuo prod_catg
contro l'espressione regolare '^1,.*|.*,1$|.*,1,.*'
restituendo 1 (TRUE)
se corrisponde, 0 (FALSE)
altrimenti.
Quindi la tua clausola WHERE sarà simile a:
WHERE prod_catg REGEXP '^1,.*|.*,1$|.*,1,.*'
spiegazione dell'espressione regolare:
^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
sono sicuro che questa espressione regolare potrebbe essere molto più compatta ma non sono così bravo con le espressioni regolari
ovviamente puoi cambiare la categoria che stai cercando nell'espressione regolare (prova a sostituire 1
con 7
nell'esempio sopra)