2012-09-24 22 views
5

Ürünle ilgili kategori kimliklerini virgülle ayrılmış değerler olarak kaydetmek için 'kategoriler' adlı bir alan içeren bir ürün tablosum var. Bir kategorideki ürünleri aramak için regexp kullanıyorum.PHP'de virgülle ayrılmış bir dizeden tam değeri bulma MySQL

, 4,24,1,31 benim ifadesini içeren kayıt yoktur olmasıdır

..WHERE categories REGEXP ',?4,?' 

varsayalım ama bu kategorideki 4 ürününü ve sadece tek bir kategori 4 gösterilecek lüzum 24

hem döndürür.

Bir şey mi eksik?

+2

İlişkileri neden böyle saklarsınız? Neden başka bir tablo kullanmıyorsun? –

+0

oldu. ama çok ürünüm var ve bu ürünlerin her biri iki veya daha fazla kategoriyle alakalı. bu yüzden biraz büyük masa yapar. – vinu

+0

Peki? Veritabanında bir şeyler yapmanın doğru yolu budur. Şimdi REGEXP'yi büyük masada yapmak zorundasınız, bunun daha hızlı olduğunu mu düşünüyorsunuz? –

cevap

7

Kullanım

WHERE categories REGEXP "(^|,)4(,|$)" 

virgülle veya dize başlangıcındaki/sonundaki çevrili bu 4 eşleşir.

Mevcut sürümünüzde, her iki virgül de tamamen isteğe bağlıdır, dolayısıyla 24'daki 4 eşleşir.

İlgili konular