Php 使用GROUPBY的MySQL循环
这是我的桌子:Php 使用GROUPBY的MySQL循环,php,mysql,Php,Mysql,这是我的桌子: Table: category ---------------- id | category ------------------ 1 | category1 2 | category2 3 | category3 4 | category4 5 | category5 - 如何获得mysql结果,如下所示: (注意:每个类别(1-5)仅分配一个标题,然后再次重复类别循环。) 我试过使用“按顺序分组” Category 1 === titl
Table: category
----------------
id | category
------------------
1 | category1
2 | category2
3 | category3
4 | category4
5 | category5
-
如何获得mysql结果,如下所示:
(注意:每个类别(1-5)仅分配一个标题,然后再次重复类别循环。)
我试过使用“按顺序分组”
Category 1 ===
title 1
Category 2
title
Category 3
title 5
Category 4
title 3
Category 5
title 4
Category 1 ===
title 9
Category 2
title
category 3
title 6
category 4
title10
category 5
title 8
category 1 ===
title 11
category 2
title 12
如果您想使用PHP构建这种格式,也可以使用while循环来创建它。考虑这个例子:
$results_from_db = array(
array('id' => 1, 'category' => 'category1', 'title' => 'title 1', 'category_id' => 1),
array('id' => 1, 'category' => 'category1', 'title' => 'title 9', 'category_id' => 1),
array('id' => 1, 'category' => 'category1', 'title' => 'title 11', 'category_id' => 1),
array('id' => 2, 'category' => 'category2', 'title' => 'title 2', 'category_id' => 2),
array('id' => 2, 'category' => 'category2', 'title' => 'title 7', 'category_id' => 2),
array('id' => 2, 'category' => 'category2', 'title' => 'title 12', 'category_id' => 2),
array('id' => 3, 'category' => 'category3', 'title' => 'title 5', 'category_id' => 3),
array('id' => 3, 'category' => 'category3', 'title' => 'title 6', 'category_id' => 3),
array('id' => 4, 'category' => 'category4', 'title' => 'title 3', 'category_id' => 4),
array('id' => 4, 'category' => 'category4', 'title' => 'title 10', 'category_id' => 4),
array('id' => 5, 'category' => 'category5', 'title' => 'title 4', 'category_id' => 5),
array('id' => 5, 'category' => 'category5', 'title' => 'title 8', 'category_id' => 5),
);
$ids = array();
foreach($results_from_db as $value) {$ids[] = $value['id'];}
$ids = array_values(array_unique($ids));
sort($ids);
$needle_key = 0;
// build the data (kinda like recursive searching)
$data = array();
while(true) {
$current_value = array_shift($results_from_db);
if($current_value['category_id'] == $ids[$needle_key]) {
$data[] = $current_value;
$needle_key++;
if($needle_key > count($ids)-1) {
$needle_key = 0; // resetter
}
} else {
array_push($results_from_db, $current_value);
}
if(empty($results_from_db)) {
break;
}
}
?>
<!-- if you want to echo -- >
<?php foreach($data as $key => $value): ?>
<?php echo '<strong>'.$value['category'].'</strong><br/>'; ?>
<?php echo str_repeat(' ', 8) . $value['title'].'<br/><br/>'; ?>
<?php endforeach; ?>
首先,您需要一起正确地查询这些值,您可以使用join
// SAMPLE => SELECT * FROM `category`
// LEFT JOIN `news` ON `news`.`category_id` = `category`.`id`
样本输出:
其次,在获得值之后,您需要对它们进行排序,在本例中,(1,2,3,4,5)
考虑这个例子:
$results_from_db = array(
array('id' => 1, 'category' => 'category1', 'title' => 'title 1', 'category_id' => 1),
array('id' => 1, 'category' => 'category1', 'title' => 'title 9', 'category_id' => 1),
array('id' => 1, 'category' => 'category1', 'title' => 'title 11', 'category_id' => 1),
array('id' => 2, 'category' => 'category2', 'title' => 'title 2', 'category_id' => 2),
array('id' => 2, 'category' => 'category2', 'title' => 'title 7', 'category_id' => 2),
array('id' => 2, 'category' => 'category2', 'title' => 'title 12', 'category_id' => 2),
array('id' => 3, 'category' => 'category3', 'title' => 'title 5', 'category_id' => 3),
array('id' => 3, 'category' => 'category3', 'title' => 'title 6', 'category_id' => 3),
array('id' => 4, 'category' => 'category4', 'title' => 'title 3', 'category_id' => 4),
array('id' => 4, 'category' => 'category4', 'title' => 'title 10', 'category_id' => 4),
array('id' => 5, 'category' => 'category5', 'title' => 'title 4', 'category_id' => 5),
array('id' => 5, 'category' => 'category5', 'title' => 'title 8', 'category_id' => 5),
);
$ids = array();
foreach($results_from_db as $value) {$ids[] = $value['id'];}
$ids = array_values(array_unique($ids));
sort($ids);
$needle_key = 0;
// build the data (kinda like recursive searching)
$data = array();
while(true) {
$current_value = array_shift($results_from_db);
if($current_value['category_id'] == $ids[$needle_key]) {
$data[] = $current_value;
$needle_key++;
if($needle_key > count($ids)-1) {
$needle_key = 0; // resetter
}
} else {
array_push($results_from_db, $current_value);
}
if(empty($results_from_db)) {
break;
}
}
?>
<!-- if you want to echo -- >
<?php foreach($data as $key => $value): ?>
<?php echo '<strong>'.$value['category'].'</strong><br/>'; ?>
<?php echo str_repeat(' ', 8) . $value['title'].'<br/><br/>'; ?>
<?php endforeach; ?>
你能解释一下显示结果的模式吗?你想重复第1-5类,浏览所有的标题吗?@Sean:是的。。重复类别1-5为什么
category 2
和category 3
第一次缩进一个额外的空格?这就是你想要的吗?根据结果创建一个二维数组,其中第一个维度是类别,第二个维度是类别中所有元素的数组。然后在类别中循环,将一个项目从子数组中移出并打印出来。OP想要类别1到类别5,只分配一个标题,然后再次重复类别循环。
category1
title 1
category2
title 2
category3
title 5
category4
title 3
category5
title 4
category1
title 9
category2
title 7
category3
title 6
category4
title 10
category5
title 8
category1
title 11
category2
title 12