0

このようなテーブルがあるとしましょう

ITEM
------
id | Name           | idCat
-------------------------
1    Bridgestone A   1,5,11
2.   Velg            2,3
3.   Bridgestone B   12,4

Category
-----------
idCat  | Name      
--------------
1        Ban
2.       Velg
3.       Velg Silver
4.       Ban Luar
5.       Ban dalam
11.      Ban Special

そして、たとえば、Velgを検索したい..そして、idCatに「2」があり、LIKE '2%'を使用しているため、Velgのみを取得します

しかし、問題は.. idCat が 1 である BAn を検索すると、ブリヂストン A とブリヂストン B が得られます。ブリヂストン B には idCat 12 があり、LIKE '1%' を使用すると一致するためです。

私の質問は、「、」で区切られたもののみに一致する検索を実行するためのクエリ方法です..

私の悪い英語でごめんなさい

4

2 に答える 2

2

使用するFIND_IN_SET()

SELECT  *
FROM    tableName
WHERE   FIND_IN_SET('1', idCat) > 0

また、テーブルを正規化する必要があります。コンマで区切られた値を 1 つのフィールドに格納するのは、本当に悪い習慣です。

推奨される新しいスキーマ設計は次のとおりです。

アイテム

  • アイテム ID (PK)
  • 項目名

カテゴリー

  • カテゴリ ID (PK)
  • 種別名

アイテム_カテゴリ

  • アイテム ID (外部キー)
  • カテゴリ ID (外部キー)
于 2013-04-04T07:13:35.360 に答える
0

FIND_IN_SET を使用する

select * from ITEM where FIND_IN_SET('2', idCat) > 0
于 2013-04-04T07:14:05.723 に答える