2016-04-04 106 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