簡體   English   中英

PHP/MySQL 按列分組結果

[英]PHP/MySQL group results by column

為了保持盡可能少的 SQL 語句,我想從 MySQL 中選擇集:

SELECT * FROM products WHERE category IN (10,120,150,500) ORDER BY category,id;

現在,我有以下方式的產品列表:

CATEGORY
 - product 1
 - product 2
CATEGORY 2
 - product 37
...

處理 MySQL 結果的最佳和最有效的方法是什么?

我想像(偽 PHP)

foreach ($product = fetch__assoc($result)){
  $products[$category][] = $product;
}

然后在輸出時,執行 foreach 循環:

foreach($categories as $category){
  foreach($products[$category] as $product){
    $output;
  }
}

這是最好的,還是像mysql_use_groupby神奇東西?

就像mluebke評論的那樣,使用 GROUP 意味着您只能為每個類別獲得一個結果。 根據您提供的列表作為示例,我認為您想要這樣的東西:

$sql = "SELECT * FROM products WHERE category IN (10,120,150,500) GROUP BY category ORDER BY category, id";
$res = mysql_query($sql);

$list = array();
while ($r = mysql_fetch_object($res)) {
  $list[$r->category][$r->id]['name'] = $r->name;
  $list[$r->category][$r->id]['whatever'] = $r->whatever;
  // etc
}

然后遍歷數組。 例子:

foreach ($list as $category => $products) {
  echo '<h1>' . $category . '</h1>';

  foreach ($products as $productId => $productInfo) {
    echo 'Product ' . $productId . ': ' . $productInfo['name'];
    // etc
  }

}

不,我認為您的解決方案是解決此問題的最佳方法。 似乎對您來說重要的是稍后的輸出,因此您應該堅持使用您的方法。

您是要獲取類別列表還是實際將所有產品分組到類別中?

如果是后者,最好這樣做:

SELECT 
p.product_id, 
p.name, 
p.category_id, 
c.name AS category 
FROM products p 
JOIN categories c ON (c.category_id = p.category_id AND p.category_id IN (x,y,z))

然后在 PHP 中你可以遍歷數組(偽代碼):

    $cats = array();

    foreach($products as $product) { 
        if(!in_array($product['category'], $cats)) {
            $cats[$product['category_id']] = $product['category'];
        }
        $cats[$product['category_id']][$product['product_id']] = $product['name'];
    }

這將使您將 $cats 作為一個數組,並將產品分類到其中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM