2012-01-03 12 views
1

私のデータベースから、あなたがスーパーマーケットで受け取った領収書に似ているデータを取得したい(実際の状況にちょっとした例がある)。 たとえば、2つ(常に2つだけ)の製品1と3が得られます。これらの製品は、別々の製品データベースに格納されています。 ショッピング結果は、時間、場所などのすべての詳細を含む2つの列(product_1およびproduct_2)で1つのデータベースに格納されます。この買い物の状況は、私の実際の状況との比較に過ぎないので、買い物リストのための良いデータベース構造ではないことが分かっています。MYSQLクエリの問題 - 製品の詳細を結果に結びつける

これで、領収書全体を取得したいと思いますが、商品IDを印刷する代わりに、名前と価格などをお伝えします。

私はこのクエリを使用する1つの製品だけ持っていた場合:

SELECT `list`.`time`, `list`.`location`, `prod`.`prod_name`, `prod`.`prod_price` 
FROM `shopping_list` `list`, `products` `prod` 
WHERE `list`.`product_1` = `prod`.`prod_id` 

をしかし、私は二つの製品を持っているので、私はちょうど

AND `list`.`product_2` = `prod`.`prod_id` 

で上に行くことはできませんが、どのようにあなたは私が希望achiveありません持っているのが好きですか?

はあなたが製品テーブルに参加する必要があります、非常に多くの フィル

答えて

0

をありがとう二回

例えば

SELECT 
     `list`.`time`, 
     `list`.`location`, 
     `prod1`.`prod_name` `prod_name1`, 
     `prod1`.`prod_price` `prod_price1` , 
     `prod2`.`prod_name` `prod_name2`, 
     `prod2`.`prod_price` `prod_price2` 
FROM `shopping_list` `list` 
    INNER JOIN `products` `prod1` 
    ON `list`.`product_1` = `prod1`.`prod_id`  
     INNER JOIN `products` `prod2` 
    ON `list`.`product_2` = `prod2`.`prod_id` 

私はあなたのビジネスルールは、あなたが、彼らは常に2つの製品を選択する必要がある場合、JOIN二INNERはLEFT JOINをに変換する必要があるかもしれませんが何であるかわかりません。

+0

私は自分でも同様のことをしたと思います。(私は質問にしますが、FROMテーブルを2回使ってprod1とprod2は結合なしではなくWHEREで)。だからこれはかなり問題を解決しますが、私はPHPで配列に結果を取得するとき私はprod_nameとインデックスの2倍を持っています。 prod_name1とprod_name2としてどのようにマークすることができるか、あるいはその状況にどのように対処することができるのか、解決策はありますか...ありがとうございました! :) – Phil

+1

列別名を使用できます。テーブルエイリアスと同じように動作します。私はこれを反映する答えを更新しました。 –

+0

WOW。知っておくべきこと:)とてもありがとうございました。私はこれが今私のすべての問題を解決すると思う。使用するテクノロジが提供しなければならない機能を知るには、常に良いことです。 – Phil

0

正確な状況はわかりませんが、通常、product_1やproduct_2のようなフィールド名はデータベースの設計が悪いことを示しています。しかし、本当に必要な場合は、製品テーブルに2回参加する必要があります。

select 
* 
from 
list l 
, product p1 
, product p2 
where 
    l.product_1 = p1.product_id 
    and l.product_2 = p2.product_id 

(これはoracle構文ですが、mysqlでも動作すると思います)。

hth。

+0

上記のように私は製品リストなどには使用しません。私の場合、それはスポーツイベント(時間、リーグ、人気など)であり、prod1はホームチームであり、両方とも彼らがより詳細な情報を含む 'clubs'テーブルに保存されているゲストチームをプロデュースします。私はこの方法で構造がより合理的かと思いますか? – Phil

+0

はい、私はこのような何かのための構造が完全に細かいことに同意します:) –

0

1つのデータベース結果行から2行を解析することができれば、これまでの回答はうまくいきます。データベースから2行が必要な場合は、UNIONクエリを実行できます:

SELECT `list`.`time`, `list`.`location`, `prod`.`prod_name`, `prod`.`prod_price` 
FROM `shopping_list` `list`, `products` `prod` 
WHERE `list`.`product_1` = `prod`.`prod_id` 
UNION 
SELECT `list`.`time`, `list`.`location`, `prod`.`prod_name`, `prod`.`prod_price` 
FROM `shopping_list` `list`, `products` `prod` 
WHERE `list`.`product_2` = `prod`.`prod_id` 
+0

私の友人は、私はUNIONを使うべきだと言いましたが、もっと詳しく説明する時間がありませんでした。あなたの事例に非常に感謝します!私はあなたの使い方に違いがあるかどうかは分かりません。 – Phil

関連する問題