可以用php/mysql在多个类别中列出同一项吗?

yacmzcpb  于 2021-06-24  发布在  Mysql
关注(0)|答案(3)|浏览(233)

我有一个网站,其中列出了不同类别和子类别的产品-相当标准的东西。然而,我现在需要列出同一产品在多个类别-我怎么能做到这一点?
我在使用代码:

"SELECT * FROM ProductTable WHERE Category = 1"

我可以通过在category表中输入多个数字来实现。 "1 2 3" 使用代码:

"SELECT * FROM ProductTable WHERE Category LIKE 1"

但这也会返回第10类和第11类的产品(我有20个类别)。
我可能是从错误的Angular 来处理这个问题,但有没有办法让代码工作?

9udxz4iz

9udxz4iz1#

由于类别和产品之间不再有一对多关系,因此需要一个新表来提供所需的多对多关系。比如:

product_categories
------------------
category_id INT
product_id INT

主键:(类别\u id,产品\u id)
这将允许产品以规范化的方式属于多个类别,而不是将category字段视为id列表。

fdbelqdn

fdbelqdn2#

要补充davidethell的答案,请搜索并阅读“数据库规范化”。良好而简单的关系是关系数据库的关键。维基百科有一篇很好的文章,但也有很多类似的文章:https://en.m.wikipedia.org/wiki/database_normalization

jobtbby3

jobtbby33#

好吧,对于其他人来说,这是我的代码:
“从producttable.intproductid=linktable.intproduct上的producttable内部联接(linktable.intcategory=categorytable.intcategoryid上的linktable内部联接categorytable)中选择*,其中linktable.intcategory=%s”
我有三个表:第一个是产品表,每个产品都有一个唯一的编号,这是主键。第二个是category表,每个category都有一个唯一的编号,该编号是主键。然后我创建了第三个包含两列的表;intproduct和intcategory符合david的上述回答。这是存储产品/类别列表的第三个表,每个产品都有一个单独的行用于它所列的每个类别。

相关问题