2016-04-04 80 views
1

我想创建一个数据库,其中产品可能有多个类别分配给他们,并以一种设置的方式进行排序,但我努力想出一个坚实的方法来显示结果,例如:数据库和SQL - 订购问题 - PHP

我有一个包含产品数据的数据库,它包括列 - prod_cat_1,prod_cat_2,prod_cat_1_order,prod_cat_2_order

prod_cat_1 = primary category 
prod_cat_2 = secondary category 

prod_cat_1_order & prod_cat_2_order = the order for each column 

上面列设置为INT(11)。

所以说,我有这样的数据:

prod_name prod_cat_1 prod_cat_2 prod_cat_1_order prod_cat_2_order 
--------- ---------- ---------- ---------------- ---------------- 
product 1 cat 1   cat 2   2     2 
product 2 cat 1   cat 3   3     1 
product 3 cat 1      1     
product 4 cat 2   cat 1   2     2 
product 5 cat 3      2     
product 6 cat 3   cat 2   3     1 
product 7 cat 2   cat 3   1     2 
product 8 cat 1      4     
product 9 cat 3   cat 1   1     1 

我想prod_cat_1_order,然后再通过prod_cat_2_order订购。

我所知道的:

ORDER BY prod_cat_1_order, prod_cat_2_order 

但这个错误输出它,例如下面的猫1:

product 3 
product 9 
product 1 
product 4 
product 2 
product 8 

此外,我所面临的另一个问题是,如果我查询猫1它将考虑prod_cat_1_order中的所有值,例如它会输出如下:

product 3 
product 9 
product 1 
product 4 
product 2 
product 8 

我想要要先订购由prod_cat_1分配到cat 1的所有产品,因此cat 1的所有记录都会先按prod_cat_1_order的顺序显示,然后再按prod_cat_2_order中设置的任何顺序进行排序。

所以输出应该是这样的:

product 3 
product 1 
product 2 
product 8 
product 9 
product 4 

然后,如果排序猫2,顺序将是:

product 7 
product 4 
product 6 
product 1 

然后,如果排序猫3,顺序将是:

product 9 
product 5 
product 6 
product 2 
product 7 

我不知道如果我想要做的是一个简单的办法什么的很复杂,但我会非常GRA你可以给我提供任何帮助或建议。

非常感谢提前。

回答

1

如果一个产品可以有多个类别,那么您的数据库设计需要更好地反映它(如果您需要第三个类别,是否会添加两个列?)。

常用的方法是拥有一个Junction table,它将包含引用您的Product和Category表的外键,并具有另一列来存储您想要实现的产品排名。

然后,通过加入您的产品表格和第一个接合点,按产品进行过滤和排序应该很简单。

这可以接受吗?

+0

也许我应该在我的问题上更清楚。我的数据库确实包含两个表格,一个包含产品数据(其中类别由数字分配)和另一个包含由它们反映的猫ID号和名称的类别表。我使用INNER JOIN按类别显示产品,是否有什么不同? – SharpenedPixels

+0

我的答案建议创建第3个表格,表示您已有的2个连接点。其目的是替换产品表中的prod_cat *字段,以反映产品和类别之间的多对多关系。这样,如果一个产品有几个类别,它在该交接表中由多行代表。当产品只有一个类别时,它可以避免prod_cat_2列中的NULL值,并且在实现您打算使用每个产品的类别排名时会有很大帮助。给它一个尝试:) –

+0

谢谢,我已经快速查看你提供的链接,我明白你的意思。仍然不能100%确定我将如何去实施它。我会看看我能否找到更多有关联结表的信息并从那里出发。再次感谢,这是我需要的一点点信息让我朝着正确的方向前进。 – SharpenedPixels