我有一个关系mysql数据库设置。我想在一个查询中从主行和所有关系数据(即多个关联的行)中提取一个项目的所有数据。除了一个查询中的多个JOIN语句之外,最简单/最好的方法是什么?
目前使用的表和查询如下。
关系数据
------------------------------------------------------------------------------------------------------------------------------
| 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 :(得分:2)
最好的方法是使用多个JOIN
子句,每个关系一个。
不要害怕JOIN
。这是标准做法。
另一种方法是为每个查询使用一个子查询,但查询优化器无论如何都会将它们变成JOIN。
JOIN
查询将更容易阅读。
修改强>
我知道,你有某种形式的EAV表。你的情况有点复杂,如果没有完整的结构(缺少T_field_settings)和一些样本数据,我不会尝试提供确切的查询,但请看一下我之前的答案,关于如何使用self join从EAV表中获取结果。它应该让你走在正确的轨道上。