2010-12-30 33 views
2

MySQL(v5.0.51)のクエリで誰かが助けになるのではないかと思います。私はこのようなテーブルを持っている:MySQLクエリのヘルプ

category_id | category_text | subcategory 
25   | Motor Controls | NULL 
26   | Contactors  | 25 
27   | Overloads  | 25 
28   | Motors   | NULL 
29   | Accessories | 28 

サブカテゴリ列のNULL有する各エントリは、トップレベルカテゴリとはサブカテゴリが属する最上位カテゴリ指示サブカテゴリにおける値を表しています。上記例えば

:それぞれのサブカテゴリは、モータのCATEGORY_ID(25)は25の値は、今では店舗に商品テーブルにこれらの値を使用

を制御有するため コンタクタとオーバーロードがモータ制御に属しここではサブカテゴリのcategory_idのみを格納しています。

product_id | product_item | product_supplier_id | product_description | product_category_id 
24   | Product A | 39     | Product A description | 27 --category_id of subcategory (ie.Overloads) 
25   | Product B | 39     | Product B description | 26 --(Contactors) 

私が午前問題は、私は私が(とりわけ)PRODUCTS表を照会し、カテゴリとサブカテゴリの両方を立ち上げることができ SQLクエリを必要とするということです。私はどちらか一方ではできますが、両方ではできません。私はUNION、JOINSなどを試しましたが、それを得ることはできません。これは私がこれまでにサブカテゴリを持ってきたものです。

SELECT p.*, c.company_name, pc.category_text AS subcategory 
FROM products p, company c, product_categories pc 
WHERE p.product_supplier_id = c.company_id 
AND p.product_category_id = pc.category_id 

この結果、以下の結果が得られます。

product_id | product_item | product_supplier_id | product_description | product_category_id | company_name  | subcategory 
24   | Product A | 39     | Product A description | 27     | Product A Supplier | Overloads 
25   | Product B | 39     | Product B description | 26     | Product B Supplier | Contactors 

は基本的に私が欲しいのは、それは私がテーブルを作成する方法でこれを行うことができ、この

24 | Product A | 39 | Product A description | 27 | Product A Supplier | **Motor Controls** | Overloads 

のように見えるように、各サブカテゴリの正しいトップレベルのカテゴリを含む列を追加することですまたは私はそれを変更する必要がありますか?

申し訳ありません申し訳ありませんわかりやすい画像がありましたが、「評判」が1で、投稿できませんでした。

ご協力いただければ幸いです。 MySQLデータベースにアクセスするためにPHPでクエリを使用しています。

おかげ

答えて

1
SELECT p.*, 
       c.company_name, 
       pc.category_text AS subcategory 
       ppc.category_text AS category 
    FROM products p, 
       company c, 
       product_categories pc, 
       product_categories ppc 
WHERE p.product_supplier_id = c.company_id 
    AND p.product_category_id = pc.category_id 
    AND pc.subcategory = ppc.category_id 

P.S:私は

+0

おかげで(のようなオラクルでは、CONNECT BY句)MySQLが階層データを照会するためのより良いサポートがあればいいのに!それは完璧に働いた。私はそれが必要以上に複雑になっていたと思います...誰も解決策を提示されたときにそれを言うのですか?再度、感謝します! – user558720

0
SELECT p.*, c.company_name, pc.category_text AS subcategory,ppc.category_text AS category 
    FROM products p 
    left join company c on p.product_supplier_id = c.company_id 
    left join product_categories pc on p.product_category_id = pc.category_id 
    left join product_categories ppc on pc.subcategory = ppc.category_id 
+0

ちょうど記録のためにこれも働いた。それは私に学ぶ代わりに私に与えます。ありがとう! – user558720