2012-09-24 8 views
5

私は商品カテゴリIDをカンマ区切りの値として保存するために 'categories'というフィールドを含む商品テーブルを持っています。私はカテゴリから製品を検索するためにregexpを使用しています。PHPでカンマ区切りの文字列から正確な値を検索するMySQL

4,24,1,31 を含むレコードが存在すると仮定し、私の表現は、

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

であるが、これは私が唯一のカテゴリ4を表示する必要があるカテゴリ424

の両方の製品を返します。

何か不足していますか?

+2

なぜあなたはそのような関係を保存しますか?なぜあなたは別のテーブルを使用しないのですか? –

+0

私はそうでした。しかし、私は多くの製品を持っており、それらの製品はすべて2つ以上のカテゴリに関連しています。それで少し巨大なテーブルを作る。 – vinu

+0

だから?これは、データベース内のものを行う正しい方法です。今あなたは巨大なテーブルでREGEXPをしなければならない、それは速いと思いますか? –

答えて

7

使用

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

カンマや文字列の先頭/末尾に囲まれた場合、これは4に一致します。

現在のバージョンでは、両方のカンマが完全にオプションであるため、424になります。

関連する問題