0

非常に古いmysqlデータベース(2003年頃)からレポートを作成する必要があります。だからスタイルが悪い。構造は、テーブルに列(id、type、field、value)があることです。これらのフィールドにはすべての情報がありますが、1つのIDには多くのエントリがあります。通常、データはid、name、speed、service、projectなどのように格納されます。このテーブルには、id(多くの行に使用)、type、field(ここにname、speed、serviceが配置されます)のようにデータが格納されます。 ...ただし、そのうちの1つだけ)、value(フィールド'field'の値)。ただし、各ID(各IDに複数のエントリがある)のこのテーブルデータを、テーブル間の接続であるテーブルと組み合わせてから、3番目のテーブル(実際には最初のテーブルと同じですが、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 に答える