php - 对于每个类别行产品

标签 php mysql arrays foreach

我有 3 张 table 。

模块名称(模块 ID、模块名称、模块内容)

module_groups (group_id,group_name,group_content)

module_to_group (module_id,group_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 组

模块一

第 1 组

模块二

第 2 组

模块 3

第 2 组

模块 4

但我要求它是这样的:

第 1 组

模块一

模块二

第 2 组

模块 3

模块 4

很久以前我做过类似的东西。 据我所知,我对每个都使用过。但是当然,我当时拥有的资源现在不再是谷歌搜索结果的前 10 名。 (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/

相关文章:

javascript - Meteor - 添加了数组项目类,但是如何添加?

php - Yii2 ActiveDataProvider 获取结果正确,但在摘要文本中显示totalCount 0

php - 使用mysqli防止sql注入(inject),如何设置NULL或CURRENT_DATE?

PHP:将函数范围限制在当前文件内

php - 访客柜台

c++ - 从头文件访问数组会使程序崩溃

php - 如何在 PHP 中使用数组进行 MYSQL 查询?

mysql - 如何在 SQL 中使用 NULL 存储缺失的 FLOAT 值

php - ajax 和数据模态未加载的数据

c - 以螺旋方式填充C中的数组