php - 搜索多个类别

标签 php mysql categories

假设我有一张这样的 table

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%'

但问题是..当我搜索 BAn idCat 为 1 时,我得到 普利司通 A 和普利司通 B,因为普利司通 B 有 idCat 12,如果我使用 LIKE '1%' 就会匹配

我的问题是,如何查询以执行仅与“,”分隔匹配的搜索..

抱歉我的英语不好

最佳答案

使用FIND_IN_SET()

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

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

这是建议的新架构设计

项目

  • 商品 ID (PK)
  • 商品名称

类别

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

商品类别

  • 商品 ID (FK)
  • 类别 ID (FK)

关于php - 搜索多个类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15804735/

相关文章:

mysql - 为什么 information_schema 和 Performance_schema 不是 utf8mb4 (我应该关心)?

python - 映射 Pandas 数据框中的值范围

android - Google API - YouTube - GuideCategories : list (Android)

groovy - Clojure 协议(protocol)和 Groovy 类别之间的区别

php - 修改 MYSQL 查询以仅选择特定行,用作一种索引

php - laravel 查询逗号分隔字符串中的位置

php - 如果它不存在,则添加到数组

php - 如何连接两个截然不同的mysql表,并同时按两列排序?

php - 使用 session 变量获取当前用户 ID

mysql - 如何从父表中删除一行而不从子表中删除一行?