2010-11-22 12 views
1

こんにちは私はデリマにいます
カテゴリに50の製品があり、私の製品のすべての機能を取得したいとします。
参加は何度も製品情報を返すので、SQL結合は役に立たなくなります!だからここSQLクエリまたはPHPコード?

は疑問..です優れているものを
PLAN
は、1つのSQLクエリをカテゴリ内のすべての製品の機能を取得して、PHPで各機能を反復し、製品にそれを置きます。

PLAN Bの
各製品の受け入れ

他のソリューションのクエリを呼び出すことで機能を取得!機能の価値観について

EDIT

私のテーブルスキーマの概要が..です
(行ごと)の製品情報を持つテーブルの製品は、機能(機能ID)を持っている
テーブル機能
テーブル
そして、あなたは、このaとb必要がありますすることができませんどのような

B.

を予定しておりませ

+3

あなたのスキーマに投稿する必要があります。あなたのテーブルはどのように組織されていますか –

+0

はい、質問をスキーマに更新してください。データがどのように正確に編成されているか、まさにデータから抜け出そうとしているものによっては、実際には結合が役に立つかもしれません。 –

答えて

2
$sql1 = "SELECT * FROM products P, ". //don't use star, make sure no fields are overwritten 
     INNER JOIN products_to_features PTF on P.id = PTF.project_id 
     INNER JOIN features F F.id = PTF.feature_id 
     ORDER BY P.id"; 
$r = mysql_query($sql1, $conn); 

$arr = array(); 
$lastProductId = -1; 
while ($row = mysql_fetch_assoc($r)) 
{ 
    if ($row[p_id] != $lastProductId) 
    { 
     $lastProductId = $row['p_id']; 
     $arr['p_id'] = array('productName' => $row['p_name'], 
          'productPrice' = $row['p_price'], 
          'productFeatures' = array(), 
          //other fields from product table); 
    } 
    $arr['p_id']['productFeatures']['f_id'] = array('featureName' => $row['f_name'], blah...); 
} 

明らかにあなたのフィールドはわかりませんが、もっと機能するようにfeature_valuesに参加したいと思うかもしれません。あなたはキー/値を別々にすることができます(つまり、製品名はキーとして、フィーチャ名は値としてフィーチャ名を任意のものとして使用しますが、これは1つのクエリで実行可能(推奨)です。

+0

あなたの時間をありがとう..機能VALUESのための余分なテーブルがあります..私は別のクエリを行う必要がある場合私に言うかもしれません?ありがとうございました – GorillaApe

+0

いいえ、あなたはまだもう1つだけ参加していませんあなたのテーブルがどのように見えるのか分かりませんが、私の印象はあなたの製品と機能との間のフィーチャ値テーブルは不要ですそれは何ですか)。製品と機能値の間には多対多が存在するはずです。フィーチャ値はフィーチャタイプのインスタンスです。 (すなわち、特徴「味」特徴値「イチゴ」)。クエリが完了したら、同様の方法で#arrに新しい値を追加します。それぞれの機能をそれぞれの値の鍵にすることができます。 –

+0

ちょっとしたタイプミスを修正して、feature_valuesで作業しました –

2

を彼らの機能を持つ製品を持っており、値テーブル1つまたは多くても2つの合計クエリで行われます(ヘッダーの場合は1つ、フィーチャの正しいソートされたリストの場合は1つ+ id列)。そのクエリがPlan Aか未定のPlan Cのどちらであるかは、正確なテーブル構造に依存しますが、これはあなたの質問からは明らかではありません。

0

一般的に、作成するデータベースのクエリが少ないほど良いでしょう。あなたのテーブル構造に大きく依存しますが、私はPlan Aに行きます。

+0

しかし、私はテストを実行し、PLAN Bは速かった、なぜか分からない... – GorillaApe

0

ループ内のクエリは、アプリケーションのパフォーマンスを大幅に低下させます。それを避けてください。

私たちにこのスキーマを表示してください。 1つのSQLクエリーで問題が解決される可能性が高くなります。

関連する問題