我必须从非常老的mysql数据库(大约2003年)中进行报告。所以风格不好。
结构是该表具有以下列:ID,类型,字段,值。在这些字段中都是信息,但对于一个ID,有许多条目。如果通常这样存储数据:id,名称,速度,服务,项目等,则在此表中将数据存储为:id(用于许多行),类型,字段(此处是name,speed,service)。 ...但只是其中之一),值(字段“ field”的值)。
但是我需要将每个ID(每个ID有多个条目的表)与表之间的连接的表数据组合在一起,然后与第三个表(实际上与第一个表相同,但ID不同)组合。我写了一个脚本,但是它非常慢,PHP无法在30秒内执行它。也许我应该编写脚本的一些指导?
表“基础”:
id | type | field | value
表“连接”:
master | slave
我从“基础”表中按“类型”过滤得到数据,然后获取第一行和正确的数据,然后循环进行,而表“连接”中的“主”指向我需要的具有“类型”的“基础”项目并获得正确的数据。
完整的脚本太慢了:
http://paste.php.lv/ce693aee64e9617b509e336b25e3262f?lang=php
最佳答案
您可以通过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" )
关于php - 从格式错误的数据库中检索数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11412597/