2016-12-05 6 views
2

プログラミングに慣れていません。現在メインカテゴリ+サブカテゴリをツリーとして表示しようとしています。メインカテゴリが選択されたときにサブカテゴリを表示する複雑なクエリ

カテゴリのメニューは既に作成されています。ここで、メインカテゴリ名をクリックして、このメインカテゴリに割り当てられたすべてのサブカテゴリのすべての商品を読み込むとします。問題は、私のクエリを構築する方法を理解していないということです。

私のテーブルカテゴリでは、私はメインのネコとサブネコの両方を保存しています。メインカテゴリにサブカテゴリを追加すると、メインIDカテゴリの下にメインカテゴリIDが格納されます。私はなめるとき

ID  Name  parentID 
426  Main Cat  0 
427  sub-cat  426 
428  sub-cat 2  426 
429  Main cat 2  0 

製品テーブルだからcategoryID

productID categoryID 
    1   427 
    2   428 
    3   429 

を持ってmaincatID =彼らはあるsub-catに割り当てられているので、それは私に、ID 1と2を備えた製品を示すべき1メインの猫1に割り当てられました

私は catid=426に割り当てられている潜水艦に追加した2つの製品を持っているので、私は catid=426をクリックしたとき、私は2つの製品を取得する必要があり
$masterCategory = '426'; 
$query="SELECT * from products 
LEFT JOIN categories on categories.categoryID = products.categoryID 
WHERE products.categoryID in (" . $masterCategory ."0)"; 

...製品1及び2

問題は、私は、4-を持っているということです5つの空の製品NULLすべて..これは正しくありません。

Var_dump($query);リターン

SELECT * from products 
LEFT JOIN categories on categories.categoryID = products.categoryID 
WHERE products.categoryID in (427,428,426,0) 

var_dump($masterCategory);リターン

string(12) "427,428,426," 

注:私は、パラメータ化クエリについて、それを読みました。私はSQLのパラメータをテスト目的のために追加しました。 CATIDはあなたが合格しなければならない主なIDである

SELECT a.ID,c.productID,b.Name,b.parentID 
FROM categories a JOIN categories b 
ON(a.ID=b.parentID) 
JOIN products c 
ON(b.ID=c.categoryID) 
WHERE a.ID=<catid>; 

答えて

2

は、以下のクエリを使用してみてください。 私はこれを上記のデータでシミュレートしましたが、期待通りの結果が得られました。

ID productID Name  parentID 
426 2   sub-cat 2 426  
426 1   sub-cat 426 
+0

回答ありがとうございますが、空の行を返します。MySQLは空の結果セット(つまり、ゼロ行)を返しました。 (クエリには0.0043秒かかりました) ' – VLS

+0

答えを更新しました。 –

+0

を参照してください。これはうまくいくはずですが、サブカテゴリのレベルが1つしかない場合に限ります。より多くのレベルがある場合、myslqだけではこれには適していません。 – Seb

関連する問題