MySQL - 访问一个查询中的所有关系数据

问题描述:

我有一个关系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

在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