2011-11-12 18 views
0

テーブルAとテーブルBからデータを取り出すクエリがあります。テーブルAが1である2つの間に1対多数の関係があります。私はmysqlと良いスーパーではない、と私はこのクエリを実行することができますか?テーブルBのすべてのユニークな行に対してテーブルAの情報を複製するので、データをフェッチするループが表示目的のためにすべてを整理する方法を見つけ出す唯一の方法でした。誰かが私に良い方法を示すことができるかどうか疑問に思っていましたか?クエリの最適化/データ検索

$sql = " 
    SELECT core.`id` AS attribute_id, core.`gender` as attribute_gender , core.`order` as attribute_order, core.`name` as attribute_name, coreval.`id` AS value_id, coreval.`value` as value_name 
    FROM `core_attributes` core 
    LEFT OUTER JOIN `core_attribute_values` coreval 
    ON core.id = coreval.attribute_id 
    WHERE core.active = 1 
    ORDER BY attribute_order 
"; 

try { 
    $stmt = $dbh->prepare($sql); 
    $stmt->execute(array(':agency_id' => $agency_id)); 

    $result = array(); 

    while($row = $stmt->fetch()) { 
    $result[$row['attribute_id']]['attribute_id'] = $row['attribute_id']; 
    $result[$row['attribute_id']]['attribute_gender'] = $row['attribute_gender']; 
    $result[$row['attribute_id']]['attribute_order'] = $row['attribute_order']; 
    $result[$row['attribute_id']]['attribute_name'] = $row['attribute_name']; 
    $result[$row['attribute_id']]['values'][$row['value_id']] = $row['value_name']; 
    } 
    return $result; 
} 

編集は:私の質問

答えて

1

学ぶための使用MySQLの

EXPLAIN SELECT ... 

声明、how mySQL executes your statementに無関係なクエリの一部を削除しました。そこから、それを修正してください。

1

ループwhileループは、さらにforeachループで管理することができ、少しシンプルになります。

while($row = $stmt->fetch()) { 

    // Set $id for each iteration of the while loop 
    $id = $row['attribute_id']; 

    foreach ($row as $key => $value) { 

     // Set $result to the corresponding key => value pairs 
     $result[$id][$key] = $value; 

    } 
} 

あなたのmySQL文は私にとっては大丈夫です!