MySQL/PHP:如何分组列出结果,但限制所需的DB查询
我的数据库如下:MySQL/PHP:如何分组列出结果,但限制所需的DB查询,php,mysql,grouping,Php,Mysql,Grouping,我的数据库如下: --------------------------------------------------------------- | module_name | category | content | --------------------------------------------------------------- | module1 | category1 |
---------------------------------------------------------------
| module_name | category | content |
---------------------------------------------------------------
| module1 | category1 | content |
| module2 | category1 | content |
| module3 | category2 | content |
| module4 | category3 | content |
| module5 | category2 | content |
---------------------------------------------------------------
我希望能够创建结果组,但在不嵌套MySQL查询的情况下,无法找到最快速、最有效的方法。结果应如下所示(忽略样式):
我的代码如下所示:
$query = 'SELECT'
. ' DISTINCT'
. ' category AS name'
. ' FROM #__table'
. ' WHERE enabled = 1';
$db->setQuery($query);
$categories = $db->loadObjectList();
foreach ($categories as $category) {
$query = 'SELECT'
. ' module_name'
. ' FROM #__table'
. ' WHERE enabled = 1 AND category = \'' . $category->name . '\''
. ' ORDER BY id';
$db->setQuery($query);
$results = $db->loadObjectList();
foreach ($results as $result) {
echo $result->module_name;
}
}
这是一个有效的嵌套查询,但有更好的方法吗?一种方法是查询数据库中按类别排序的所有行,然后在PHP中将它们分组到单独的表中。您可以迭代跟踪类别中的更改并直接输出到HTML的行,或者构建一个嵌套数组结构,反映组的结构和每个组中的行,然后使用该结构来呈现HTML
$query = 'SELECT'
. ' module_name, category'
. ' FROM #__table'
. ' WHERE enabled = 1 '
. ' ORDER BY category, id';
$db->setQuery($query);
$results = $db->loadObjectList();
$current_category = null;
foreach ($results as $result)
{
if ($current_category != $result->category)
{
// whatever you do to separate the category listings
// if you don't do it before the first, check ($current_category != null)
$current_category = $result->category
}
echo $result->module_name;
}
对我来说,它看起来像是在3个表中布置数据模式,而不是一个包含3列和多行的表。在这个场景中:
加入表格并按类别对结果进行分组。只需使用数组即可。除非你的数据集是巨大的
foreach($results as $result)
//assuming $result is an associative array
$sorted_results[$result['category']][] = $result;
}
//now you can do fun stuff like
foreach($sorted_results as $category => $category_result_list) {
//do something meaningful
}
编辑:刚刚看到您的代码示例
foreach($results as $result)
//assuming $result is an associative array
$sorted_results[$result['category']][] = $result;
}
//now you can do fun stuff like
foreach($sorted_results as $category => $category_result_list) {
//do something meaningful
}