是否可以使用PHP/MySQL在多个类别中列出相同的项目?

是否可以使用PHP/MySQL在多个类别中列出相同的项目?,php,mysql,database,Php,Mysql,Database,我有一个网站,列出了各种类别和子类别的产品-相当标准的东西。但是,我现在需要在多个类别中列出相同的产品-我如何才能做到这一点 我正在使用代码: "SELECT * FROM ProductTable WHERE Category = 1" "SELECT * FROM ProductTable WHERE Category LIKE 1" 我可以通过在类别表中输入多个数字,即“1 2 3”并使用以下代码使其工作: "SELECT * FROM ProductTable WHERE Categ

我有一个网站,列出了各种类别和子类别的产品-相当标准的东西。但是,我现在需要在多个类别中列出相同的产品-我如何才能做到这一点

我正在使用代码:

"SELECT * FROM ProductTable WHERE Category = 1"
"SELECT * FROM ProductTable WHERE Category LIKE 1"
我可以通过在类别表中输入多个数字,即
“1 2 3”
并使用以下代码使其工作:

"SELECT * FROM ProductTable WHERE Category = 1"
"SELECT * FROM ProductTable WHERE Category LIKE 1"
但这也会返回类别10和11的产品(我有20个类别)


我可能从错误的角度来处理这个问题,但有没有办法让代码正常工作?

因为类别和产品之间不再存在一对多关系,所以需要一个新表来提供所需的多对多关系。比如:

product_categories
------------------
category_id INT
product_id INT
主键:(类别标识、产品标识)


这将允许产品以规范化的方式属于多个类别,而不是将类别字段视为ID列表。

要添加到davidethell的答案中,请搜索并阅读“数据库规范化”。良好而简单的关系是关系数据库的关键。Wikipedia有一篇很好的文章,但也有很多类似的文章:

好吧,对于其他试图这样做的人,这里是我的代码:

“从ProductTable.intProductID=LinkTable.intProduct中的ProductTable内部联接(LinkTable.intCategory=CategoryTable.intCategoryID上的LinkTable内部联接CategoryTable)中选择*,其中LinkTable.intCategory=%s”

我有三张桌子: 第一个是产品表,每个产品都有一个唯一的编号,该编号是主键。 第二个是类别表,每个类别都有一个唯一的编号,该编号是主键。
然后我创建了第三个包含两列的表;intProduct和intCategory符合上面David的回答。这是存储产品/类别列表的第三个表,每个产品在其中列出的每个类别都有一个单独的行

谢谢你,但你能详细说明一下吗?我已经创建了一个类别表,并将代码更改为:“在ProductTable上从ProductTable内部联接CategoryTable.category=CategoryTable.category\U ID WHERE category\U ID=1上选择*”如何将同一产品分为多个类别?哦,等等,我想它被单击了-我需要使用这些表来有效地创建重复的产品?也就是说,如果使用单个表,我需要为产品出现的每个类别创建一个重复行(将数据库的大小增加一倍甚至三倍),但使用表,我只需要复制ID?搜索“多对多关系”,我发现:这表明我在正确的轨道上,但是需要创建第三个表来链接产品和类别。谢谢,我现在正在进行彻底的谷歌搜索。我已经修改了数据库,将类别名称等元素移动到不同的表中,但我仍然需要了解如何使同一产品出现在多个类别中。