1

mysql クエリを使用してマルチレベル配列を作成することは可能ですか? たとえば、各製品について 4 枚の写真を取得したい場合はどうすればよいですか?

[1] => Array( 'name' => 'Product 1', 'picture' => array('picture1','picture2','picture3','picture4') )
[2] => Array( 'name' => 'Product 2', 'picture' => array('picture5','picture6','picture7','picture8') )

または、製品をループする foreach を作成し、foreach で各製品の写真を取得するために mysql クエリを作成する必要がありますか?

編集:

私の構造は次のとおりです。

P_Attributes
--------
id, int(15)
name, varchar(256)


P_AttributeValues
--------
id, int(15)
value, varchar(256)
attribute_id, int(15) [NOTE: This is connected to P_Attributes.id]

次に、すべての P_AttributeValues を P_Attribute 行に取得し、1 つのクエリで取得したいと考えています。それは可能ですか?

編集2:

受け入れられた回答の作成者によって作成されたクエリを使用して、この PHP コードで動作するようにしました。

$attributevalues = $auctionClass->get_rows($id);

$attr_val = array();
foreach($attributevalues as $k => $v){
    $attr_val[$v->AID]['attr_name'] = $v->AName;
    $attr_val[$v->AID]['parameters'][] = array('attr_value_name' => $v->name, 'id' => $v->id);
}
4

3 に答える 3

1

Here is a good article on doing this type of query:

http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

You might be able to adjust their examples to fit your needs.

于 2012-09-19T16:03:33.513 に答える
0

通常の JOIN クエリを使用して並べ替えるだけで、必要な階層構造を形成できるレコードから行を取得できます。

SELECT pa.id AS product_id, pa.name , pav.id AS product_attr_id, pav.value
FROM P_Attributes pa JOIN P_AttributeValues pav ON pav.attribute_id = pa.id
ORDER BY pa.id ASC, pav.id ASC

これにより、次のような行が生成されます。

product_id, name, product_attr_id, value
1, "Product 1", 1, "picture1"
1, "Product 1", 2, "picture2"
1, "Product 1", 3, "picture3"
1, "Product 1", 4, "picture4"
2, "Product 2", 5, "picture5"
2, "Product 2", 6, "picture6"
2, "Product 2", 7, "picture7"
2, "Product 2", 8, "picture8"

あなたが使用しているMySQL拡張機能はわかりません。おそらく、私が言及したようにPHPであり、あなたは私を修正しませんでした。返されたレコードごとに連想配列を取得すると、レコードごとに次の形式になります。

array('product_id' => 1, 'name' => "Product 1",
      'product_attr_id' => 1, 'value' => "picture1");

というメイン データ配列がある場合$products、このコードをループに入れるだけで生成できます。これは、レコードが呼び出さ$productRecれ、この前のループで満たされていることを前提としています。

if (!array_key_exists($productRec['product_id'], $products)) {
    $products[$productRec['product_id']] = array('name' => $productRec['name'],
                                                 'picture' => array());
}

$products[$productRec['product_id']]['picture'][$productRec['product_attr_id']] =
    $productRec['value'];

キーに ID を使用しても問題ありません。重複のない主キーであると仮定します。そのデータを失うのではなく、そのように検索するのに役立ちます。

于 2012-09-19T16:27:09.260 に答える
0

テーブルの構造によっては、探しているものがすべて含まれている行を取得し、その行から配列を作成するコードを作成できる場合があります。

于 2012-09-19T15:58:48.903 に答える