是否可以优化我写的这个查询
我创建了一种动态虚拟数据库,让我的用户能够在不影响数据库结构的情况下添加自定义字段。这是到目前为止结构的一个非常简化的 View 。
tables | columns
db_cases | caseid
db_structure | fieldname
db_data | fieldname, data, caseid
db_names | nameid
- 我们可以通过向 db_structure 添加一行来创建一个新字段
- 我们希望记录的任何数据都记录到 db_data。
- 名称存储在 db_names 中,name_id 存储在 db_data 中
我正在尝试将案例输出到 html 表格
希望其余部分是不言自明的,您可以看到它是多么低效。我可以通过连接做同样的事情吗?
SELECT
case_id,
(SELECT data_field_value
FROM db_data
WHERE data_case_id = case_id AND data_field_name = 'casestatus'
) AS casestatus,
(SELECT forename_company
FROM db_names
WHERE name_id = (SELECT data_field_value
FROM db_data
WHERE data_case_id = case_id AND data_field_name = 'client1'
)
) AS client1_forename_company
FROM db_cases
谢谢
最佳答案
事实上,Chibuzo 是对的。从删除它开始 :-)) 但在此之前,稍微玩一下它,这是一种很好的脑力锻炼,比如象棋之类的 :-)
select
case_id,
d_status.data_field_value as case_status,
d_client1_name.forename_company as client1_forename_company
from db_cases
join db_data as d_status
on d_status.data_case_id = case_id
AND d_status.data_field_name = 'casestatus'
join db_data as d_client1
on d_client1.data_case_id = case_id
AND d_client1.data_field_name = 'client1'
join db_names as d_client1_name
on d_client1_name.name_id = d_client1.data_field_value
我希望这些没有子查询的直接连接会更有效率,尽管您必须对其进行测试 - 优化通常会有惊喜。
关于mysql - 如何优化这个复杂的 EAV MYSQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9981435/