2013-06-03 64 views
0

MySQL表方案,那么我的问题是,我想店某种产品,这些产品在自己的表和我想选择一些成独具特色的/强调产品表,它将存储每个表中选定行的ID,以在网站的主页上显示这些特色产品。的功能/强调产品

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

我想了很多如何解决这个问题,但是,我希望有人会知道正确的答案!

回答

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 

这会给你一个结果集包含所有特色产品。 请注意,这是未经测试的,但应该通过得到想法。

+0

。 。 'order'对于一个列来说是个糟糕的名字,因为它是一个MySQL保留字。 –

+0

@GordonLinoff绝对正确...现在更新。 – Lucas

+0

是的,这适用于某种产品,但我有3种类型的产品,您不能在一列上加入3张表格。或者,也许我应该创建列到每个表,以加入他们的特色产品表? – user2042930