2012-09-19 52 views
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); 
} 
+0

MySQL不會創建數組。 –

+0

您可以在單個查詢中提取所有必需的數據,但您需要使用PHP進行處理以獲取分層結構。 – Orbling

+0

如果您在數據庫中顯示了表格的佈局,則可以顯示示例代碼。 – Orbling

回答

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" 

正如我所提到它,你沒有指正你使用的,大概什麼PHP MySQL擴展不知道。如果您獲取關聯數組每個返回的記錄,這將是,每個記錄,在這種形式:

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應該沒問題,假定它們是沒有重複項的主鍵。會以這種方式幫助查找,而不是丟失數據。

+1

這其實就是我自己做的。我結束了一些代碼,我上面分享 - 我不檢查array_key_exists,因爲我認爲這是不必要的在我的情況:-)但非常感謝! – denlau

+0

@denlau:在你的代碼中,數組是自動進入的,未初始化的變量在數組上下文中被引用,因此不需要檢查等。不是很好的做法,但它確實有效。很高興你有它的工作。 – Orbling

+0

迴轉:我不明白? :-) – denlau

0

根據您的表結構,你可以拉行它包含你正在尋找的所有東西,然後編碼從該行開始創建數組。

+0

我上面已經編輯過 - 現在說的是關於表格結構的更多信息.. – denlau

+0

由於每個產品可能有多個屬性,並且您向每個屬性顯示了多個值,所以它不會很漂亮每個產品獲得一行。 –

相關問題