特色/强调产品的Mysql表架构

时间:2013-06-03 19:32:54

标签: mysql database-schema product featured

我的问题是,我想在他们自己的牌桌中存储某种产品来自这些产品我想选择一些到一个特色/强调产品表,它将存储每个表中所选行的ID,以在网站主页上显示这些特色产品。

从他们的桌子中选择特色产品后我想自己订购它们将如何列出,所以我认为需要一个新的表格,我可以存储ID和特色产品的订单,但我可以想象一下如何正确连接这些表。

我正在考虑如何解决这个问题但是,我希望有人知道正确的答案!

1 个答案:

答案 0 :(得分:1)

创建第二个表:

CREATE TABLE FEATURED_PRODUCTS (
    ID INTEGER NOT NULL,
    PRODUCT_ID INTEGER NOT NULL,
    PRODUCT_ORDER INTEGER NOT NULL
)

如果您想找到特色产品,请加入原始表:

SELECT P.*
FROM PRODUCTS P 
    INNER JOIN FEATURED_PRODUCTS FP ON P.ID = FP.PRODUCT_ID
ORDER BY FP.PRODUCT_ORDER

值得注意的是,FEATURED_PRODUCTS表中的ID并不是绝对必要的,我只是不喜欢没有主键列的表。

----编辑----

更完整的例子:

CREATE TABLE FRUIT_PRODUCTS (
    ID INTEGER NOT NULL,
    NAME VARCHAR(255),
    PRICE INTEGER NOT NULL,
    FARM_OF_ORIGIN VARCHAR(255)
)

CREATE TABLE BREAD_PRODUCTS (
    ID INTEGER NOT NULL,
    NAME VARCHAR(255),
    PRICE INTEGER NOT NULL,
    TYPE_OF_GRAIN VARCHAR(255)
)

CREATE TABLE MEAT_PRODUCTS (
    ID INTEGER NOT NULL,
    NAME VARCHAR(255),
    PRICE INTEGER NOT NULL,
    ANIMAL VARCHAR(255)
)

CREATE TABLE FEATURED_PRODUCTS (
    ID INTEGER NOT NULL,
    TABLE_NAME VARCHAR(255),
    PRODUCT_ID INTEGER NOT NULL,
    PRODUCT_ORDER INTEGER NOT NULL
)

然后你可以加入他们所有人:

SELECT FP.TABLE_NAME, P.ID, P.NAME, P.PRICE, P.FARM_OF_ORIGIN, 
    NULL AS TYPE_OF_GRAIN, NULL AS ANIMAL
FROM FEATURED_PRODUCTS FP 
    INNER JOIN FRUIT_PRODUCTS P ON FP.TABLE_NAME = 'FRUIT_PRODUCTS' 
        AND FP.PRODUCT_ID = P.ID
UNION
SELECT FP.TABLE_NAME, P.ID, P.NAME, P.PRICE, NULL AS FARM_OF_ORIGIN, 
    P.TYPE_OF_GRAIN, NULL AS ANIMAL
FROM FEATURED_PRODUCTS FP 
    INNER JOIN BREAD_PRODUCTS P ON FP.TABLE_NAME = 'BREAD_PRODUCTS' 
        AND FP.PRODUCT_ID = P.ID
UNION
SELECT FP.TABLE_NAME, P.ID, P.NAME, P.PRICE, NULL AS FARM_OF_ORIGIN, 
    NULL AS TYPE_OF_GRAIN, P.ANIMAL
FROM FEATURED_PRODUCTS FP 
    INNER JOIN MEAT_PRODUCTS P ON FP.TABLE_NAME = 'MEAT_PRODUCTS' 
        AND FP.PRODUCT_ID = P.ID

这将为您提供包含所有特色产品的结果集。 请注意,这是未经测试的,但应该通过了解。