MySQL搜索字段(或其他解决方案)

时间:2012-04-25 10:05:00

标签: php mysql database database-design search

我的产品表属于特定类别,但每个类别中的产品可以包含多个元数据跟踪字段

表: products

 id    name          category     metadata
 1   something          1      blue,red,purple
 2   something else     2      left,right,middle

我一直在尝试考虑使用单个产品表的最佳方法,但似乎无法方便地挤压元数据。现在我已经创建了一个包含所有元数据和字段的表,用于跟踪相关类别(顺序是这样我可以通过下拉菜单等来订购它们。)

更新了表格 products

 id    name          category   metadata
 1   something          1         1,2,3
 2   something else     2         4,5,6

表: metadata

 id   category   sequence   option
 1        1         1        blue
 2        1         2        red
 3        1         3        purple
 4        2         1        left
 5        2         2        right
 6        2         3        middle

如果这种格式有意义..我正在尝试生成一个查询,它将搜索我的product表中的值并获取每个和所有相关的元值。我遇到的问题是试图在产品领域找到一个独特的价值。如果我搜索LIKE(%1%)的MySQL,我将获得1,11,21,31等的匹配...我想在默认情况下向该字段添加一个前导和尾随逗号,然后搜索{{1}这将是独一无二的..但必须有一个更好的方式...

任何建议(关于格式或查询)?

2 个答案:

答案 0 :(得分:4)

在单个数据库字段中使用逗号分隔值不是理想的设计。除了你提到的问题(难以搜索)之外,你的查询效率会降低,因为数据库将无法使用索引进行查找。

我建议使用与products表具有多对一关系的单独表 products_metadata 。拥有* metadata_id *和* product_id *,它是链接回products表的外键。这将使你的工作变得更加容易。

答案 1 :(得分:1)

您想要添加另一个表,该表将产品链接到其元数据。它将有两列:productidmetadataid,分别引用productsmetadata表中的相关条目。然后,您不再在products表中保留元数据,而是根据需要将JOIN保存在一起。

相关问题