0

我必须从非常旧的 mysql 数据库(大约 2003 年)中进行报告。所以画风不好。结构是表有列:id、type、field、value。在这些字段中是所有信息,但对于一个 id 有许多条目。如果通常数据会这样存储:id、name、speed、service、project 等,那么在这个表中数据存储如下:id(用于许多行)、type、field(这里放置 name、speed、service 。 ...但只是其中之一),值(字段“字段”的值)。但是我需要将每个 id 的表数据(每个 id 有多个条目)与表之间的连接表结合起来,然后与第三个表(实际上与第一个表相同但具有不同的 id)结合。我写了一个脚本,但它非常慢,PHP 无法在 30 秒内执行它。

表“基础”:

id | type | field | value

表“连接”:

master | slave

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

http://paste.php.lv/ce693aee64e9617b509e336b25e3262f?lang=php

4

1 回答 1

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" )
于 2012-07-10T12:01:10.543 回答