2010-05-05 48 views
0

我有一個關係mysql數據庫設置。我想在一個查詢中爲主行中的一個項目和所有關係數據(即多個關聯行)提取所有數據。在一個查詢中,除了多JOIN語句之外,最簡單/最好的方法是什麼?MySQL - 訪問一個查詢中的所有關係數據

當前使用的表格和查詢如下。

關係數據

------------------------------------------------------------------------------------------------------------------------------ 
| value_id | value_site_id | value_field_set_id | value_field_setting_id | value_parent_id | value_parent_type | value_value | 
------------------------------------------------------------------------------------------------------------------------------ 

主表

----------------------------------------------------------------------- 
| item_id | item_site_id | item_country_id | item_category_id | etc etc 
----------------------------------------------------------------------- 

並且查詢

SELECT fs.field_variable_name, fs.field_type, fv.value_value, fv.value_parent_id 
FROM T_field_values AS fv 
    INNER JOIN T_field_settings AS fs ON fv.value_field_setting_id=fs.field_id 
WHERE fv.value_parent_type=:type && 
    fv.value_parent_id=:id; 
+0

你能舉一個你正在查詢的表格的例子嗎?或者你當前的一些SQL? – Jamey 2010-05-05 15:40:22

+0

更新了問題。 – buggedcom 2010-05-05 15:52:24

回答

2

在B最好的方法是使用多個JOIN子句,每個關係一個。

不要害怕JOIN。這是標準做法。

另一種方法是對每一個使用子查詢,但查詢優化器會將它們變成JOIN。

JOIN查詢將更容易閱讀。

編輯

我明白了,你有某種形式的EAV表。你的情況有點複雜,如果沒有完整的結構(缺少T_field_settings)和一些示例數據,我不會試圖提供確切的查詢,但可以在這裏查看我以前的答案,瞭解如何使用self join從EAV表中獲取結果。它應該讓你走在正確的軌道上。

+0

我只說不加入,因爲它可以達到'n'個數據塊,沒有限制。 – buggedcom 2010-05-05 15:43:35

+0

@buggedcom,我擴大了我的答案,因爲你也可以使用子查詢。如果您提供更多詳細信息,我們可以提供示例。它不會是無限的。你不能有比行更多的連接。 – 2010-05-05 15:50:54

+0

問題已更新。 – buggedcom 2010-05-05 15:53:08