数据库& SQL - 订购问题 - PHP

时间:2016-04-04 00:08:50

标签: php sql database

我正在尝试创建一个数据库,其中产品可能有多个类别分配给它们并按照设定的方式排序,但我很难想出一个可靠的方法来显示结果,例如:< / p>

我有一个包含产品数据的数据库,它包含列 - 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

但这输出不正确,例如下面的cat 1:

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

我遇到的另一个问题是,如果我查询cat 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

然后如果对cat 2进行排序,则顺序为:

product 7
product 4
product 6
product 1

然后如果对cat 3进行排序,则顺序为:

product 9
product 5
product 6
product 2
product 7

我不确定我想要做的是一个简单的解决方案还是一些非常复杂的东西,但我非常感谢你能给我的任何帮助或建议。

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

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

常见的方法是使用Junction table,其中包含引用Product和Category表的外键,还有另一列用于存储您想要实现的产品排名。

然后,通过加入Product表和那个结点,按产品过滤和排序应该很简单。

这可以接受吗?