我有一个网站,列出了各种类别和子类别的产品 - 相当标准的东西。但是,我现在需要在多个类别中列出相同的产品 - 我该怎么做?
我正在使用代码:
"SELECT * FROM ProductTable WHERE Category = 1"
我可以通过在类别表格中输入多个数字来实现它,即。"1 2 3"
并使用代码:
"SELECT * FROM ProductTable WHERE Category LIKE 1"
但是这也会返回10类和11类产品(我有20个类别)。
我可能会从错误的角度接近这个问题,但有没有办法让代码工作?
答案 0 :(得分:1)
由于您不再在类别和产品之间建立一对多关系,因此您需要一个新表来提供所需的多对多关系。类似的东西:
product_categories
------------------
category_id INT
product_id INT
主键:(category_id,product_id)
这将允许产品以标准化方式属于多个类别,而不是将“类别”字段视为ID列表。
答案 1 :(得分:0)
要添加到davidethell的答案,请搜索并阅读有关数据库规范化的信息'。良好而简单的关系是关系数据库的关键。维基百科有一篇很好的文章,但有很多人喜欢它:https://en.m.wikipedia.org/wiki/Database_normalization
答案 2 :(得分:0)
好的,对于其他人试图这样做,这是我的代码:
" SELECT * FROM ProductTable INNER JOIN(LinkTable INNER JOIN CategoryTable ON LinkTable.intCategory = CategoryTable.intCategoryID)ON ProductTable.intProductID = LinkTable.intProduct WHERE LinkTable.intCategory =%s"
我有三张桌子: 第一个是产品表,每个产品都有一个唯一的编号,这是主键。 第二个是类别表,每个类别都有一个唯一的数字,这是主键。 然后我创建了一个包含两列的第三个表; intProduct和intCategory根据David的上述答案。它是存储产品/类别列表的第三个表,每个产品对于列出的每个类别都有一个单独的行。