按列对MySQL结果进行分组

时间:2012-08-08 03:46:43

标签: php mysql arrays multidimensional-array

我将MySQL结果输出到HTML时遇到问题。我有一个MySQL结果返回:

| title        | category_name | from_where |
---------------------------------------------
| Title num 1  | Journal       | iidl_file  |
---------------------------------------------
| Title num 2  | Books         | iidl_file  |
---------------------------------------------
| Title num 3  | Announcement  | iidl_post  |
---------------------------------------------
| Title num 4  | News          | iidl_post  |
---------------------------------------------

如何在HTML中预览此数据:

iidl_file
 - Title num 1 (Journal)
 - Title num 2 (Books)

--------------------------

iid_post
 - Title num 3 (Announcement)
 - Title num 4 (News)

2 个答案:

答案 0 :(得分:0)

这就是我要做的事情:

SELECT `title`, `category_name`, `etc` FROM `table_name` ORDER BY `from_where`;

如果您有很多记录,那么确保from_where列上有索引会给您带来很大好处。

这是一些伪代码:

$groups = array();
foreach ($rows as $row) {
    $from_where = $row['from_where']
    if (! isset($groups[$from_where])) {
        $groups[$from_where] = array();
    }
    $groups[$from_where][] = $row;
}

现在,您的$groups将包含由from_where列键入的数组。

这样做,您实际上不得甚至在查询中发出ORDER BY。

答案 1 :(得分:0)

只是一个想法,只需使用正常的mysql结果循环与这样的代码,没有测试但希望它会有所帮助

$from_all = array();
$from_all[$from_where][] = array('title'=>$title,'category_name'=>$category_name)

然后

foreach($from_all as $from_where=>$array) {
    echo $from_where
    foreach($array as $row) {
        echo $row['title'];
        echo $row['category_name'];
    }
}
相关问题