Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MySQL按列分组结果_Php_Mysql_Group By_Logical Grouping - Fatal编程技术网

PHP/MySQL按列分组结果

PHP/MySQL按列分组结果,php,mysql,group-by,logical-grouping,Php,Mysql,Group By,Logical Grouping,为了尽可能少地保留SQL语句,我想从MySQL执行select set: 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) 然后在输出时,执行forea

为了尽可能少地保留SQL语句,我想从MySQL执行select set:

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循环:

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

这是最好的,还是像
mysql\u use\u 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
  }

}
foreach($category=>$products){
回显“.$category.”;
foreach($productId=>$productInfo形式的产品){
回显'Product'.$productId'.:'.$productInfo['name'];
//等
}

}
您想获取类别列表还是将所有产品分组到类别中

如果是后者,最好:

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中,您可以遍历数组(psuedo代码):


这将给您留下$cats作为一个数组,其中包含已排序的产品。

按类别分组时,结果集中每个类别只能得到一个产品。这就是你想要的吗?@mlueabke:谢谢,我用正确的分组编辑了我的SQL语句-另一个
顺序
,而不是
分组方式
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))
    $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'];
    }