我有三张桌子。
模块名称(模块id、模块名称、模块内容)
模块组(组id、组名称、组内容)
模块到组(模块id,组id)
我使用以下查询获取结果:

$result = $db->sql_query("select
m.module_id,
m.module_name,
g.group_name
from
" . $prefix . "_mmmodule_names m ,
" . $prefix . "_mmmodule_to_group m2g,
" . $prefix . "_mmmodule_groups g
where
m.module_id = m2g.module_id
and
m2g.group_id = g.group_id
and
g.group_id = g.group_id
order by
m.module_id");
while($row = $db->sql_fetchrow($result)) {
$content .= '<div>' . $row['group_name'] . '</div>';

$content .= '<div>' . $row['module_name'] . '</div>';
}
echo $content;

它输出如下:
第一组
模块1
第一组
模块2
第2组
模块3
第2组
模块4
但我要求这样:
第一组
模块1
模块2
第2组
模块3
模块4
很久以前我就做了这样的东西。
我记得我曾经为每一个搜索引擎使用过,但我当时拥有的资源现在已经不再是谷歌的前十大搜索结果了。
(Groupconcat对我来说不是个好主意)

最佳答案

$result = $db->sql_query("select m.module_id, m.module_name, g.group_name from " . $prefix . "_mmmodule_names m ,  " . $prefix . "_mmmodule_to_group m2g, " . $prefix . "_mmmodule_groups g where m.module_id = m2g.module_id and m2g.group_id = g.group_id and g.group_id = g.group_id order by m.module_id");

$modules = array();
while ($row = $db->sql_fetchrow($result)) {
    $modules[$row['group_name']][] = $row['module_name'];
}

foreach ($modules as $groupName => $moduleNames) {

    echo "<h2>$groupName</h2>";

    foreach ($moduleNames as $moduleName) {
        echo "<p>$moduleName</p>";
    }
}

仅仅记住最后一个组名是不够的,因为它们可以混合,另一个解决方案可能是在查询中添加组名的顺序,在这种情况下,您可以确保组不会混合。

关于php - 每个类别行产品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17264484/

10-11 03:18
查看更多