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


Retrieve data from bad formatted database

我必须从非常旧的mysql数据库(大约2003年)中做一个报告。所以风格不好。表的结构是有列:id、类型、字段、值。在这些字段中有所有信息,但对于一个id有许多条目。如果通常数据存储方式如下:id、名称、速度、服务、项目等,那么在该表中,数据存储方式为:id(用于许多行)、类型、字段(此处为名称、速度和服务……,但仅为其中之一)、值(字段"field"的值)。但我需要将每个id的表数据(其中每个id有多个条目)与表之间有连接的表相结合,然后与第三个表(实际上与第一个表相同,但id不同)相结合。我写了一个脚本,但速度非常慢,PHP无法在30秒内执行。也许我应该写剧本的一些方向?

表"基础":

id | type | field | value

表"连接":

master | slave

我从表"base"中获得数据,按"type"过滤,然后获得第一行和正确的数据,然后循环,而表中的"master"connects"指向我需要的"type"的"base"项并获得正确的数据。以及太慢的完整脚本:

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