从错误格式的数据库中检索数据

时间:2012-07-10 11:43:40

标签: php mysql

我必须从非常古老的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

1 个答案:

答案 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" )