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 行 - 并在一个查询中获取它。那可能吗?

编辑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

这是一篇关于执行此类查询的好文章:

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

您也许可以调整他们的示例以满足您的需求。

于 2012-09-19T16:03:33.513 回答
0

根据您的表结构,您可以提取包含您要查找的所有内容的行,然后对从该行创建数组进行编码。

于 2012-09-19T15:58:48.903 回答
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 回答