2010-09-06 36 views
0

好,所以我有這個 page和你可以看到我記錄了12個產品的數組。如果向下滾動,可以看到需求是我需要按類別名稱對它們進行分組,但我不確定構建循環的最佳方式。有沒有適當的方法來更好地構建陣列循環

my query 

$query = "SELECT p.name, p.price, pc.quantity, p.image, p.descr, t.name as Category_name 
      FROM products as p 
      join categorizations as pc on p.id = pc.product_id 
      join categories as c on c.id = pc.category_id 
      JOIN types AS t on t.id = p.type_id 
      WHERE c.code  = '{$type}_{$count}' 
      order by p.order desc"; 

$allproducts = array(); 
while($row_r = mysql_fetch_assoc($result)){ 
    $allproducts[] = $row_r; 
} 

也許我需要改變我的查詢或按類別名稱組,但可能會刪除一些產品。也許我可以創建期多維數組和循環每個類別名稱

任何建議

回答

3

如果您更改您的陣列產品線,

while($row_r = mysql_fetch_assoc($result)){ 
    $allproducts[] = $row_r; 
} 

while($row_r = mysql_fetch_assoc($result)){ 
    $allproducts[$row_r['Category_name']][$row_r['name']] = $row_r; 
} 

你會通過被分組的項目該類別會自動生效,這取決於您以後如何使用信息。

如果你想收拾你的陣列,以減少數組的內存佔用,可以添加這些行進入循環:

unset($allproducts[$row_r['Category_name']][$row_r['name']]['Category_name']); 
    unset($allproducts[$row_r['Category_name']][$row_r['name']]['name']); 

如果看起來很複雜或令人困惑,我通常使用OBJECT 。

+0

儘管我也喜歡使用'mysql_fetch_object'來方便使用,但我在內存使用方面遇到了問題,而我在數組中遇到過這些問題。這隻在你獲取相當多的數據時才重要 - 我不知道這裏的數據集有多大。儘管我喜歡這個解決方案 - PHP的數組非常適合數據組織。 – 2010-09-06 18:54:03

0

有你拉的人當中唯一的列?如果是這樣,您可以將GROUP BY和GROUP_NAME都分組,這樣可以將類別組合在一起,但避免丟失任何行。然後,您可以將數據按類別組織起來,這將更容易循環,數據庫已爲您完成大部分組織工作。

如果你沒有一個獨特的列,你已經拉動了,添加主鍵列並不會有多大的傷害。在這種情況下,你的GROUP BY可能會是這樣的:

GROUP BY Category_name, p.id 
+0

什麼表我需要主鍵列....產品或類型 – Trace 2010-09-06 18:36:47

+0

推測的產品,因爲這些都是保證是唯一的每一行,右邊的人?如果按Category_name分組,然後按types.id分組,則每個Category_name和類型id組合只能獲得一行。根據Category_name和products.id進行分組的好處是,您可以獲得按Category_name分組的行,但由於沒有重複的產品ID,因此不會丟失任何行。 – 2010-09-06 18:56:26

相關問題