0

次のコードとデータベースがあります。私の意図は、エンドユーザーがデータベースから列を選択し(「ajax」オプション/mysqlから直接選択することにより)、それらについてレポートを実行できることです。彼らが使用するテーブルを事前に決定でき、彼らは列を選択します。私の最大の問題は、「スケジュール」クエリを実行する最良の方法です。

スケジュールを実行するには、「Customer」と「Delivery」の詳細 (顧客情報と配送先住所) が必要です。すべてのテーブルの「custnum」と年を使用して、実行する年間スケジュールを選択します (つまり custnum bar12345)。・年間スケジュール表はbar123452012

bar123452012 テーブルから引き出された「custnum」ごとに 2 つの製品がある可能性があります。

このテーブルは製品ごとに 1 つの行ですが、367 列、1-prodid、および yday 整数でタイトル付けされた 366 です。php は、別の関数でその年に 365 または 366 を使用する必要がある場合に機能します。

何を提案しますか?すべての顧客を 1 人ずつ引き出してテーブルにフォーマットする PHP ループ、または tindex に基づいて各行に異なるテーブルを左結合する SQL クエリがあります。2012id?! 少なくとも 200、おそらく最大 1000 の顧客テーブルについて話しているため、速度と効率が必要です。

リアリティチェックをしてくれたドワーフに感謝します。データベースを再編成して、1 つの集計表を作成し、そこから作業します。

ありがとうドワーフ。午後中ずっと新しいデザインに取り組んでいます... データベース

表 customer の表構造

custnum varchar(255) No
surname varchar(50) No
name varchar(50) No
phone1 varchar(50) No
phone2 varchar(50) No
email varchar(50) No
add1 varchar(50) No
add2 varchar(50) no
city varchar (50)
郵便番号なし varchar(10) いいえ

テーブル配信詳細のテーブル構造

special varchar(50) いいえ
add1 varchar(50) いいえ
add2 varchar(50) いいえ
city varchar(50) いいえ
postcode varchar(10) いいえ
custnum varchar(100) いいえ

テーブル ノートのテーブル構造

custnum varchar(50)
メモなし varchar(50)
時刻タイムスタンプなし いいえ CURRENT_TIMESTAMP

テーブル prodgroup のテーブル構造

pgroup varchar(20)
名前なし varchar(50)
説明なし varchar(50) いいえ

テーブル プロダクトのテーブル構造

name varchar(50 ) No amount varchar(50
) No
description varchar(50) No
pgroup varchar(50) No
price varchar(50) No
picture varchar(100) No
productid varchar(10) No
suppid varchar(50) No
vat tinyint (1) いいえ

テーブル スケジュールのテーブル構造

productid varchar(15) いいえ

d0 varchar(100) いいえ
d1 varchar(100) はい NULL d2 varchar(100) はい NULL ....... d362 varchar(100) はい NULL d363 varchar(100) はい NULL d364 varchar(100) はい NULL d365 varchar (100) はい NULL

custnum varchar(50) いいえ

id int(50) いいえ

テーブル サプライヤーのテーブル構造

suppid varchar(50) No
name varchar(50) No
phone1 int(100) No
phone2 int(100) No
email varchar(100) No
add1 varchar(50) No
add2 varchar(50) No
city varchar(50) No
postcode varchar (10)
説明なし varchar(100) いいえ

テーブル vatgroup のテーブル構造

vat int(20)
金額なし decimal(20,0)
説明なし varchar(20) いいえ

4

1 に答える 1

0

何を提案しますか?すべての顧客を 1 人ずつ取得してテーブルにフォーマットする php ループ

このアプローチはパフォーマンスにとって自殺的です

または、 tindex に基づいて各行に異なるテーブルを左結合する SQL クエリがあります。2012id?!

これは、質問で概説した設計では実際には不可能です。ただし、デザインの変更が役立つ場合があります。すべてのレポートに対して単一のテーブルがあり、レポート名の列を追加すると、もう少し近くなります。次のようなものを検討してください。

Table structure for table Reports
custnum varchar(255) No
productid   varchar(15) No  
date  DateTime    No  

特定の顧客のすべての行を取得するクエリを作成できるようになりました

select * from Reports 
where date between '2012-01-01' and '2013-01-01'
and custnum = 'bob54326'

これらの結果からテーブルを生成するには、PHP (または使用しているもの) を使用します。

この戦略が「UI から直接テーブルにアクセスする」モデルを壊すことはわかっていますが、そのモデルはうまく機能しないのではないかと心配しています。ツールを強制的に設計に適合させようとするのではなく、所有しているツールで動作するように設計を変更します。

于 2012-04-26T15:36:59.683 に答える