2010-05-29 73 views
2

我有2個相關的MySQL表中一對多的關係。一對多太多的數據返回 - MySQL

客戶: CUST_ID,CUST_NAME,cust_notes

訂單: ORDER_ID,CUST_ID,order_comments

所以,如果我做一個標準的加入讓所有的客戶,並通過PHP他們的訂單,我回是這樣的:

  • 黑傑克,傑克的筆記,關於傑克的一階
  • Ĵ評論ACK黑色,傑克的筆記,關於傑克的二階
  • 西蒙·史密斯,西蒙的筆記,西蒙的一階
  • 西蒙·史密斯,西蒙的筆記,西蒙的二階評論評論意見

的問題是,cust_notes是一個文本字段,可以很大(幾千字)。所以,似乎每個訂單都會返回該字段無效。

我可以用GROUP_CONCATJOINS返回所有order_comments在單一行,但order_comments是一個大的文本字段也一樣,所以它看起來可能會產生問題。

我應該只使用兩個單獨的查詢,一個用於customers表,另一個用於orders表?

有沒有更好的方法?

+0

此查詢的目的是什麼?你打算列出它與分頁或什麼? – 2010-05-29 02:14:59

+0

在PHP頁面上,我需要顯示客戶的所有數據,然後顯示所有相關訂單的數據。當訂單> 20時,我會爲給定客戶創建某種分頁系統。 – emcpete 2010-05-29 02:19:12

+0

爲一個客戶?那麼問題是什麼? – 2010-05-29 02:21:53

回答

0

看。你的頁面很像SO上的問題頁面。首先提出問題,並在下面回答。
沒有人打擾請求一個查詢!

答案 - 是的,使用連接,但獲取名稱和ID的唯一,不是完整的用戶的信息。
沒什麼複雜的。

僅針對客戶和訂單列表使用單獨查詢

+0

很酷,謝謝。這就是我將要去的。我猜連接開銷並不是什麼大問題。很多人在這個問題上說了類似的話,但Shrapnel上校是第一個回答(通過評論原始問題),所以他得到了複選標記。 – emcpete 2010-05-29 02:56:51

0

如果我正確理解你的問題,最好是使用兩個查詢,一個結果,如:

Jack black 
    comments 
    comments 
    comments 
    comments 

Simon Smith 
    comments 
    comments 
    comments 
+0

是的,也許兩個查詢會更好。我試圖避免由於通過PHP的連接開銷。 – emcpete 2010-05-29 02:39:48

+0

@emcpete你可以用兩個查詢提交一個請求並獲得連續的結果集嗎? http://www.robert-gonzalez.com/2007/06/01/mysql-multiple-result-procs-in-php/ – 2010-05-29 02:43:57

+0

@emcpete你真的在你的應用中遇到任何連接問題嗎? – 2010-05-29 02:44:25

0

通常我們使用了一些不同的策略。

在一個案例中,我們返回了多個結果集 - 一組爲父母,另一組爲所有孩子。 ORDER BY是一樣的,所以你可以在客戶端代碼中輕鬆地爲每個父項交錯子項。

也有可能返回多個結果集 - 一個父母和一個孩子的每個父母(我們使用光標的外部部分)。

我們在SQL Server中使用的另一件事是XML,因此它實際上返回了分層表單。

+0

是的,多個結果集看起來很有趣。不幸的是,我被困在MYSQL 4中,所以我不支持它。但對其他人來說,一定的可能性。謝謝! – emcpete 2010-05-29 03:09:40

0

您可以運行兩個查詢,一個用於筆記,另一個用於查看客戶詳細信息。

// this will give you orders in an efficient way 
SELECT cust_id, order_id, order_comments 
FROM customers AS c 
LEFT JOIN orders as o ON o.cust_id = c.cust_id 
LIMIT xx, yy 

// this will get all details from N specific customers 
SELECT * FROM customers 
WHERE cust_id = 'xxx' OR cust_id = 'yyy' OR cust_id = 'zzz' 

然後通過第二查詢到一個數組,正如你所展示的是第一個,從存儲陣列中的客戶使用的詳細信息。

應該是非常有效的。

+0

是的,我認爲2個問題是要走的路。我試圖用一個由於php-> mysql連接開銷。但顯然我誤解了這個重量。謝謝! – emcpete 2010-05-29 02:54:27