PHP/MySQL按列分组结果
为了尽可能少地保留SQL语句,我想从MySQL执行select set: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
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'];
}