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 .. 我只得到 Velg 因为 idCat 有 '2' 而我使用 LIKE '2%'

但问题是..当我搜索 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

您还应该规范化您的表格。将用逗号分隔的值存储在单个字段中确实是一个坏习惯。

这是一个建议的新模式设计

物品

  • 物品 ID (PK)
  • 项目名称

类别

  • 类别 ID (PK)
  • 分类名称

物品类别

  • 项目 ID (FK)
  • 类别 ID (FK)
于 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 回答