[英]php mysql and GROUP_CONCAT
我有3张桌子:
module_names(module_id,module_name)
module_groups(group_id,group_name)
modules_to_groups(module_id,group_id)
当我在查询中使用GROUP_CONCAT时,我得到正确的结果
group2 -> test_module , test_module2
group4 -> test_module3
但我想要:
group1 -> (no module added yet)
group2 -> test_module , test_module2
group3 -> (no module added yet)
group4 -> test_module3
我使用的整个功能:
function ListModuleGroups() {
global $admin,$prefix, $db, $admin_file;
OpenTable();
echo '<div><b>Groups and Modules :</b></div>';
$result = $db->sql_query("SELECT m.module_id, m.module_name, g.group_name, g.group_id, GROUP_CONCAT(m.module_name) from " . $prefix . "_mmmodule_groups g, " . $prefix . "_mmmodule_names m, " . $prefix . "_mmmodule_to_group m2g where m.module_id = m2g.module_id and m2g.group_id = g.group_id and g.group_id = g.group_id group by g.group_id");
while($row = $db->sql_fetchrow($result)) {
$group_name = $row['group_name'];
$module_name = $row['GROUP_CONCAT(m.module_name)'];
echo "<div>".htmlentities($group_name). '--' . htmlentities($module_name)." </div>";
}
CloseTable();
}
您需要使用LEFT JOIN
因为要列出所有module_groups
,
SELECT a.Group_name,
GROUP_CONCAT(c.Module_Name)
FROM module_group a
LEFT JOIN modules_to_groups b
ON a.group_id = b.group_id
LEFT JOIN module_names c
ON b.module_ID = c.module_ID
GROUP BY a.Group_name
要进一步获得有关联接的知识,请访问以下链接:
首先,您的SQL中似乎有一个奇怪的情况-g.group_id = g.group_id。 也许您可以尝试将其删除。
其次,您应该使用LEFT JOIN读取所有组。 LEFT JOIN从左侧的表中选择所有记录,而从右侧的表中仅选择匹配的记录。 请参考MySQL文档以进一步阅读。
下面的代码可能有助于获得所需的结果:
function ListModuleGroups() {
global $admin,$prefix, $db, $admin_file;
OpenTable();
echo '<div><b>Groups and Modules :</b></div>';
$result = $db->sql_query("SELECT g.group_name, GROUP_CONCAT(m.module_name) modules
from " . $prefix . "_mmmodule_groups g
LEFT JOIN " . $prefix . "_mmmodule_to_group m2g ON g.group_id = m2g.group_id
LEFT JOIN " . $prefix . "_mmmodule_names m ON m2g.module_id = m.module_id
GROUP BY g.group_id");
while($row = $db->sql_fetchrow($result)) {
$group_name = $row['group_name'];
if (!empty($row['modules'])) {
$module_name = $row['modules'];
} else {
$module_name = '(no module added yet)';
}
echo "<div>".htmlentities($group_name). '--' . htmlentities($module_name)." </div>";
}
CloseTable();
}
希望能帮助到你!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.