2013-01-13 71 views
0

我開始提供大約30種不同服務的新業務。我試圖找出使用MySQL & PHP「輕鬆訪問」所有30個服務的最佳方法。此時,我正在建立我的數據庫,並且要確保我正朝着正確的方向前進。這是我想出了到目前爲止的概念:多服務的MySQL數據庫設置

Create Table customers (customer_id) 
Create Table orders (order_id, customer_id, product_id) 
Create Table logo_design (logo_id, customer_id, order_id, product_id) 
Create Table web_design (web_id, customer_id, order_id, product_id) 

所以我的想法是,每個新客戶,他們將被分配一個唯一的客戶ID。此ID將與他們一起購買他們購買的每項服務。如果我遇到困難,那就是說客戶訂購了3種不同的服務。如何顯示他們已購買的3項服務,而無需執行一百萬個不同的循環或驗證檢查?真正連接所有表格以便於訪問的最佳方法是什麼?

任何意見非常感謝!

+0

你爲什麼要爲每個服務創建單獨的表時,它們具有相同的基本儘可能多的表柱?爲什麼不能有一個「類型」列的表?這將極大地簡化這一點。 – Ilion

+0

@Ilion,原因是因爲每個服務都會存儲不同的信息,所以我認爲最好爲每個服務分開一個表。我在帖子中給出的例子只是連接所有表格的方式。除了我所展示的內容外,每個表格中還會存儲更多信息。我是否錯過了你所說的話? – three3

+0

我不這麼認爲,但是當你提供的內容不一樣時,很難就你的結構給出建議。 – Ilion

回答

0

聽起來像你想加入表格並按特定客戶ID篩選。看看這個例子讓你開始:

SELECT * 
FROM customers AS c 
     INNER JOIN orders AS o 
      ON c.customer_id = o.customer_id 
WHERE c.customer_id = CustomerIDGoesHere 

你可以加入到你喜歡

FROM table1 
    JOIN table2 
     ON table1.column = table2.column 
    JOIN table3 
     ON table2.column = table3.column 
    JOIN table4 
     ON table1.column = table4.column 
+0

好吧,我明白。所以說我想爲customer_id取出所有訂單10.並且說出於某種原因,這個客戶訂購了所有30個服務。我需要加入全部30張桌子嗎? – three3

+0

不,從客戶ID的訂單表中的所有30行將連同來自客戶表的任何信息一起顯示。你只需要加入一次表格並指定你想要的數據。在這種情況下,您表示要加入客戶和訂單,並顯示特定客戶ID的所有行。嘗試把一些數據放到你的桌子上並播放一下 – twoleggedhorse

+0

試試這個例子http://sqlfiddle.com/#!2/2ad3f/1/0 – twoleggedhorse

0

關係數據庫通常在像客戶這樣的表和服務之類的表之間有一個表。稱之爲customer_ordered_services也許

,它只是擁有一鍵,他們希望

在你的榜樣

會有三行在這個中間表,以反映他們想要

customerId 1, serviceId 1 
customerId 1, serviceId 2 
customerId 1, serviceId 3 
三個服務的客戶和服務
+0

customer_ordered_services表與我的訂單表相同嗎? – three3

+0

是的,如果product_id鏈接到logo_id或web_id。我不知道爲什麼product_id是在這些表 – case1352