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
bagaimanapun Anda sebaiknya memfaktorkan ulang skema Anda dengan menambahkan tabel kategori dan referensi ke tabel produk (utama)
EDIT
cara lain untuk menghadapi masalah ini adalah menggunakan REGEXP
yang akan mengarah ke WHERE
yang lebih pendek klausa (inilah yang saya gunakan untuk menguji):
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;
ini akan cocok dengan prod_catg
Anda terhadap Ekspresi Reguler '^1,.*|.*,1$|.*,1,.*'
returnig 1 (TRUE)
jika cocok, 0 (FALSE)
sebaliknya.
Maka klausa WHERE Anda akan terlihat seperti:
WHERE prod_catg REGEXP '^1,.*|.*,1$|.*,1,.*'
penjelasan 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
saya yakin regexp ini bisa jauh lebih ringkas tetapi saya tidak begitu bagus dengan ekspresi reguler
jelas Anda dapat mengubah kategori yang Anda cari dalam ekspresi reguler (coba ganti 1
dengan 7
pada contoh di atas)