2016-04-04 10 views
1

私は、製品に複数のカテゴリが割り当てられ、設定された順序で注文される可能性のあるデータベースを作成しようとしていますが、堅実な方法を思いつくために苦労しています。例えば、結果を表示:データベースとSQL - 発注の問題 - PHP

Iは、製品のデータが含まれており、それが列を含むデータベースを有する - prod_cat_1、prod_cat_2、prod_cat_1_order、prod_cat_2_order

prod_cat_1 = primary category 
prod_cat_2 = secondary category 

prod_cat_1_order & prod_cat_2_order = the order for each column 

上記列は、INT(11)に設定されています。

は、だから私はこのデータを持っていると言う:

prod_name prod_cat_1 prod_cat_2 prod_cat_1_order prod_cat_2_order 
--------- ---------- ---------- ---------------- ---------------- 
product 1 cat 1   cat 2   2     2 
product 2 cat 1   cat 3   3     1 
product 3 cat 1      1     
product 4 cat 2   cat 1   2     2 
product 5 cat 3      2     
product 6 cat 3   cat 2   3     1 
product 7 cat 2   cat 3   1     2 
product 8 cat 1      4     
product 9 cat 3   cat 1   1     1 

私はprod_cat_2_orderで最初にしてprod_cat_1_orderで注文したいです。

私の知る:

ORDER BY prod_cat_1_order, prod_cat_2_order 

しかし、以下の猫の1のための例として、これは、間違ってそれを出力します。私は猫1それを照会すると

product 3 
product 9 
product 1 
product 4 
product 2 
product 8 

はまた、私が直面している別の問題がありますprod_cat_1_orderのすべての値を考慮します。たとえば、次のように出力されます。

product 3 
product 9 
product 1 
product 4 
product 2 
product 8 

cat1に割り当てられたすべてのプロダクトをprod_cat_1で最初に注文するため、cat1のすべてのレコードが最初にprod_cat_1_orderの順番で表示され、その後prod_cat_2_orderで設定された順序で並べられます。

ので、出力は次のようになります。

product 3 
product 1 
product 2 
product 8 
product 9 
product 4 

そして猫2を並べ替えた場合、順番は次のようになります。

product 7 
product 4 
product 6 
product 1 

そして猫3を並べ替えた場合、順序は次のようになります。

product 9 
product 5 
product 6 
product 2 
product 7 

私がしたいことが簡単な修正か非常に複雑なものかどうかは分かりませんが、あなたが私に与えることができる助けや助言のteful。

事前に感謝します。

答えて

1

1つの製品に複数のカテゴリがある場合は、データベース設計をよりよく反映する必要があります(3つ目のカテゴリが必要な場合は2つの列を追加しますか?)。

一般的な方法は、ProductテーブルとCategoryテーブルの両方を参照する外部キーを含むJunction tableを持ち、達成したい製品ランクを格納する別の列を持つことです。

次に、Productテーブルとその接合点を結合することで、Productによるフィルタリングと並べ替えが簡単になります。

それでも問題ありませんか?

+0

おそらく私は私の質問ではっきりしていたはずです。私のデータベースには2つのテーブルがあり、1つは製品データ(カテゴリは番号で割り当てられます)と、Cat ID番号とそれに反映される名前を含む別のカテゴリテーブルです。私はINNER JOINを使用してカテゴリー別に商品を表示していますが、あなたは何か違うものを提案していますか? – SharpenedPixels

+0

私の答えは、すでに持っている2つの間の接合点を表す3番目のテーブルの作成を示唆しています。その目的は、Productテーブルのprod_cat *フィールドを置き換えて、ProductとCategoryの多対多の関係を反映させることです。このようにして、1つの製品に複数のカテゴリーがある場合は、そのジャンクション表内の複数の行で表されます。製品にカテゴリが1つしかない場合、prod_cat_2列のNULL値は使用されません。また、製品ごとにカテゴリの順位を設定する際に役立ちます。試してみてください:) –

+0

ありがとう、私はあなたが提供したリンクをすばやく見てきました。私はそれを実装する方法を100%確信していません。ジャンクション・テーブルに関連する情報をもっと見つけてそこから行くことができるかどうかがわかります。おかげさまで、私は正しい方向に向かうために必要な情報でした。 – SharpenedPixels