我必须从非常古老的mysql数据库(大约2003年)做报告。所以风格很糟糕。 结构是该表具有列:id,type,field,value。在这些字段中都是信息,但对于一个id,有许多条目。如果通常数据将存储如下:id,name,speed,service,project等,那么在此表中数据存储如:id(用于多行),类型,字段(这里是放置名称,速度,服务。 ......但只是其中之一),value(字段'field'的值)。 但是我需要为每个id(其中每个id都有多个条目)组合这个表数据,其中table是表之间的连接,然后与第三个表(实际上是与第一个表相同但具有不同id的表)相结合。我写了一个脚本,但它非常慢,PHP无法在30秒内执行它。也许我应该编写脚本的一些方向?
表“基础”:
id | type | field | value
表“连接”:
master | slave
我从表格“base”中获取数据“type”过滤,然后得到第一行和正确的数据,然后循环,而“master”从表“连接”点到“base”项目与“type”我需要和得到正确的数据。 而完整的脚本太慢了:
http://paste.php.lv/ce693aee64e9617b509e336b25e3262f?lang=php
答案 0 :(得分:1)
你可以通过JOIN来实现。
“正常”查询:
SELECT SUM(value) FROM products WHERE product_name = "stanchion";
“您的”查询,如果我理解正确的话:
SELECT SUM(v.value) FROM bigtable v JOIN bigtable p ON (v.key = p.key AND v.field = "value" AND p.field = "product_name" ) WHERE p.value = "stanchion";
您可能希望在多列表中翻译整个bigtable:
CREATE TABLE translated [AS]
SELECT v.key AS product_id, v.value AS value,
p.value AS product_name,
s.value AS stock,
...
FROM bigtable v
JOIN bigtable p ON (v.key = p.key AND v.field = "value" AND p.field = "product_name" )
JOIN bigtable s ON (v.key = s.key AND v.field = "value" AND s.field = "stock" )