2013-06-03 62 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