0

3 つの XREF テーブルがあります。

  1. order_delivery_xref: order_id (int), delivery_id (int)
  2. delivery_invoice_xref: delivery_id (int)、invoice_id (int)
  3. invoice_order_xref: 請求書 ID (整数)、注文 ID (整数)

次のように、それらを共通のテーブルに結合する必要があります。

order_delivery_invoice_xref: order_id (int)、delivery_id (int)、invoice_id (int)

クエリを使用してこれを行う方法はありますか? または手順?またはphpスクリプト+ mysqlクエリを使用していますか?

ノート:

  1. delivery_id常に存在し、order_id
  2. Aninvoice_idは常に存在するとは限らず、null欠落している場合は行にある必要があります

これが私が試したことです:

SELECT order_id, delivery_id
FROM order_delivery_xref
WHERE 1

... 3 つのテーブルすべてについて同様です。

次に、最初の配列に対してforeach()ループを実行し、関数をphp使用して他の配列をチェックし( whereisset()を置き換えます)、html で table>tr>td を作成します。NULL!isset()

これが正しい方法かどうかはよくわかりません。誰かがより良い方法を提案できますか?

4

1 に答える 1

0

それはあなたが何をしたいかによります。一度それを行うには、これはうまくいきます:

テーブル odx (order_id int, delivery_id int) を作成します。テーブルdixを作成します(delivery_id int、invoice_id int); テーブル iox (invoice_id int, order_id int) を作成します。

odx 値 (1, 11)、(2, 22)、(3,33) に挿入します。dix 値 (22, 333)、(22, 444)、(33, 555) に挿入します。iox 値 (333, 1)、(444, 2)、(555, 2) に挿入します。

テーブル odix を作成します (order_id int、delivery_id int、invoice_id int);

odix に挿入 (order_id、delivery_id、invoice_id) odx から odx.order_id、odx.delivery_id、dix.invoice_id を選択 dix.delivery_id = odx.delivery_id 左で dix に参加 iox.order_id = odx.order_id で iox に参加;

ただし、テーブルを結合する方法については、自分で決定する必要があります。3 つのテーブルの内容により、さまざまな方法でそれらを結合し、さまざまな結果を得ることができます。

また、補助テーブルのいずれかが変更されたときに何をすべきかを理解する必要があります。odix テーブルを最初から再作成するか、新しいレコードまたは変更されたレコードを追加するだけですか。

MySQL で可能な限り多くのことを行うと、PHP よりも高速になることがわかります。MySQL は、この方法でテーブルを結合し、データを集約するのに非常に優れています。

最後に、なぜこれを行っているのか、なぜデータを別のテーブルに入れるのかを考えてみてください。MySQL では、いつでもデータをまとめてこのように表示できるので、データをコピーしても意味がないようです。データベースに冗長性が生じ、混乱を招き、管理が困難になる可能性があります。

いくつかのアイデアを得るために、「正規化」に関するいくつかの参考文献をチェックしてください。

于 2012-12-01T12:52:28.787 に答える