简体   繁体   English

来自同一张表的菜单子菜单,但在子菜单之前会有来自另一张表的另一个组子菜单

[英]Menu submenu from same table but before the sub menu there will be another group submenu from another table

This are the three table:这是三个表:

CREATE TABLE `application_default_permissions` (
  `id` int(10) UNSIGNED NOT NULL,
  `action_id` int(10) UNSIGNED DEFAULT NULL,
  `role_id` int(10) UNSIGNED DEFAULT NULL,
  `department_id` int(10) UNSIGNED DEFAULT NULL,
  `is_active` int(11) DEFAULT 0,
  `is_created` int(11) DEFAULT 0,
  `is_edit` int(11) DEFAULT 0,
  `is_delete` int(11) DEFAULT 0,
  `is_view` int(11) DEFAULT 0,
  `is_audit` int(11) DEFAULT 0,
  `is_verify` int(11) DEFAULT 0,
  `is_approved` int(11) DEFAULT 0,
  `created_by` int(10) UNSIGNED DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_by` int(10) UNSIGNED DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE `application_roles` (
  `id` int(10) UNSIGNED NOT NULL,
  `role_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `is_active` tinyint(4) NOT NULL DEFAULT 1,
  `created_by` int(10) UNSIGNED DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_by` int(10) UNSIGNED DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


CREATE TABLE `application_security_actions` (
  `id` int(10) UNSIGNED NOT NULL,
  `parent_id` int(11) DEFAULT NULL,
  `sub_parent_id` int(11) DEFAULT NULL,
  `application_id` int(10) UNSIGNED DEFAULT NULL,
  `department_id` int(10) UNSIGNED DEFAULT NULL,
  `controller_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `action_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `menu_icon` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `display_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `is_active` int(11) DEFAULT NULL,
  `is_created` int(11) DEFAULT NULL,
  `is_edit` int(11) DEFAULT NULL,
  `is_delete` int(11) DEFAULT NULL,
  `is_view` int(11) DEFAULT NULL,
  `is_audit` int(11) DEFAULT NULL,
  `is_verify` int(11) DEFAULT NULL,
  `is_approved` int(11) DEFAULT NULL,
  `created_by` int(10) UNSIGNED DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_by` int(10) UNSIGNED DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

menu submenu:

   $stmt = "
    SELECT id
         , parent_id 
         , display_name 
      FROM application_security_actions 
     where parent_id = 0
    ";
        $con = mysqli_connect('localhost', 'root', '', 'mukit_kitchen_inventor');
        $resultMainMenu = mysqli_query($con,$stmt) ;

        while($row = mysqli_fetch_array($resultMainMenu)){
            print_r($row['display_name'] . '<br />') ; // echo main menu
$resultSubmenu = mysqli_query($con,"
SELECT * 
  FROM application_security_actions 
 WHERE parent_id =  " . $row['id'] );

            if(mysqli_num_rows($resultSubmenu) >= 1){
                while($rowSub = mysqli_fetch_array($resultSubmenu)){
                    print_r( ' -- ' . $rowSub['display_name'] . '<br />'); // echo sub menu
                }
            }

        }

this code will show all menu submenu Output:此代码将显示所有菜单子菜单 Output:

IT Department IT部门
-- Application List -- 申请清单
-- Department Add -- 部门地址
-- Role Add -- 角色添加
Accounts帐户
-- Data Entry - 数据输入
Shipping船运
-- Data Entry - 数据输入
supper admin超级管理员
-- Data Entry - 数据输入

but i want this type of structure as output picture is given: enter image description here但我想要这种类型的结构,因为给出了 output 图片:在此处输入图片描述

i want it will show main menu first from application_security_actions table under that will show the role name for each role there will be show all submenu from application_default_permissions table我希望它首先显示 application_security_actions 表中的主菜单,然后显示每个角色的角色名称 将显示 application_default_permissions 表中的所有子菜单

i am having this issue but i cannot solve this problem.我有这个问题,但我无法解决这个问题。 if any one could help me.如果有人可以帮助我。

Hope it will work希望它会起作用

SELECT  d.id, d.role_name, d.display_name_id,d.display_name,d.parent_id, e.display_name AS menu_name FROM
(SELECT a.id, a.role_name, c.id AS display_name_id,c.display_name,c.parent_id FROM application_roles a
JOIN application_default_permissions b ON a.id = b.role_id
JOIN application_security_actions c ON b.action_id = c.id
GROUP BY id, role_name,display_name_id,display_name, parent_id) AS d
JOIN application_security_actions e ON e.id = d.parent_id
WHERE e.parent_id = 0 AND e.id != 0
GROUP BY  id, role_name, display_name_id,display_name,parent_id,menu_name

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM