私は注文を取得するクエリを書いています(これはeコマースタイプのサイト用です)、その注文IDからすべての注文アイテム(ecom_order_items)、印刷オプション(c_print_options)、イメージ)。 eoi_p_idは現在、イメージテーブルの外部キーです。4テーブルクエリ/ジョイン。重複する行を取得する
これは正常に動作し、クエリは次のとおりです。
SELECT eoi_parentid, eoi_p_id, eoi_po_id, eoi_quantity, i_id, i_parentid, po_name, po_price FROM ecom_order_items, images, c_print_options WHERE eoi_parentid = '1' AND i_id = eoi_p_id AND po_id = eoi_po_id;
上記の私は、余分なテーブルを追加したもの(ecom_products)を複雑に今私が注文#1
のために必要なすべてのものをつかむだろう、画像テーブルと同様に動作する必要があります。 eoi_p_idは、このテーブルの外部キーも指すことができます。私は余分なフィールド 'eoi_type'を追加しました。このフィールドには 'image'という値か 'product'という値があります。
今すぐ注文のアイテムは、画像またはecom_productsのアイテムを組み合わせて構成することができます。私が試してみると、あまりにも多くのレコードで終わってしまい、eoi_type = 'product'で実際に出力することはありません。どのように私は後になって達成するための任意のアイデアですか?必要に応じてSQLサンプルを提供できますか?
SELECT eoi_id, eoi_parentid, eoi_p_id, eoi_po_id, eoi_po_id_2, eoi_quantity, eoi_type, i_id, i_parentid, po_name, po_price, po_id, ep_id FROM ecom_order_items, images, c_print_options, ecom_products WHERE eoi_parentid = '9' AND i_id = eoi_p_id AND po_id = eoi_po_id
上記の出力結果は重複しており、期待どおりに動作しません。私はこれについて間違った方法をとっていますか? eoi_p_idの外部キーフィールドは、イメージや製品に応じて別々にする必要がありますか?
私はJOINを使用すべきですか?ここで
は、MySQLがどこにあるか、FROM句のいずれかecom_productsの結合条件を逃している質問
ecom_products +-------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+----------------+ | ep_id | int(8) | NO | PRI | NULL | auto_increment | | ep_title | varchar(255) | NO | | NULL | | | ep_link | text | NO | | NULL | | | ep_desc | text | NO | | NULL | | | ep_imgdrop | text | NO | | NULL | | | ep_price | decimal(6,2) | NO | | NULL | | | ep_category | varchar(255) | NO | | NULL | | | ep_hide | tinyint(1) | NO | | 0 | | | ep_featured | tinyint(1) | NO | | 0 | | +-------------+--------------+------+-----+---------+----------------+ ecom_order_items +--------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+----------------+ | eoi_id | int(8) | NO | PRI | NULL | auto_increment | | eoi_parentid | int(8) | NO | | NULL | | | eoi_type | varchar(32) | NO | | NULL | | | eoi_p_id | int(8) | NO | | NULL | | | eoi_po_id | int(8) | NO | | NULL | | | eoi_quantity | int(4) | NO | | NULL | | +--------------+-------------+------+-----+---------+----------------+ c_print_options +------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+----------------+ | po_id | int(8) | NO | PRI | NULL | auto_increment | | po_name | varchar(255) | NO | | NULL | | | po_price | decimal(6,2) | NO | | NULL | | +------------+--------------+------+-----+---------+----------------+ images +--------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+--------------+------+-----+---------+----------------+ | i_id | int(8) | NO | PRI | NULL | auto_increment | | i_filename | varchar(255) | NO | | NULL | | | i_data | longtext | NO | | NULL | | | i_parentid | int(8) | NO | | NULL | | +--------------+--------------+------+-----+---------+----------------+
この種の作品ですが、ユニオンの底部は0行を返します。これは、その製品の場合、それは何も印刷オプションを持っていないし、下部のクエリからそれを削除することは、トップ1に影響を与えているなど、選択された列は一致する必要があります – Horse
Yay!私はそれを働かせ、2番目のクエリの印刷オプションビットに左結合が必要になった。ありがとう! – Horse
うれしかったです。私はソファに座っていただけで、選択リストの列が正しく一致しない可能性があることに気付きました。別の注記では、「別のキーフィールドを別にする必要がありますか?」と尋ねました。画像と商品には共通点がないようです。 2つのFKだけを持つことができるときに、なぜタイプフィールドとの関係が複雑になるのですか? – mikesigs