【问题标题】:php, Mysql query to create a dropdown menuphp、Mysql查询创建下拉菜单
【发布时间】:2012-03-28 10:44:02
【问题描述】:

我只想填充一个使用 mysql 和 php 使用单个表的多级下拉菜单

示例菜单网址: http://www.vidiyarkarai.com/

(抱歉,我尝试添加图片,但不允许上传图片,请使用上述地址查看菜单,请不要介意该网站的语言...)

我只想使用单个表格生成这种类型的菜单,我使用多个表格来执行此操作,这在某些情况下效率低且速度慢,因此我想在单个表格中执行此操作。

  /*menu should be like 

  - menu_name(show if parent_id=0) // parent id is 1 for this id --- level1
    -> menu_name(show if parent_id=1) // parent id is 2 for this id  --- level2
        ->-> menu_name(show if parent_id=2) // parent id is 3 for this id  --- level3
   */
            --
            -- Table structure for table `tm_menu`
            --

            CREATE TABLE IF NOT EXISTS `tm_menu` (
              `menu_id` int(10) NOT NULL,
              `menu_name` varchar(300) DEFAULT NULL,
              `menu_desc` text,
              `menu_link` varchar(300) DEFAULT NULL,
              `item_id` int(10) DEFAULT NULL,
              `item_pos` varchar(10) DEFAULT NULL,
              `parent_id` int(10) DEFAULT NULL,
              `created_by` varchar(100) DEFAULT NULL,
              `updated_by` varchar(100) DEFAULT NULL,
              `created_on` datetime DEFAULT NULL,
              `updated_on` datetime DEFAULT NULL,
              `ip` varchar(100) DEFAULT NULL,
              `status` tinyint(1) DEFAULT NULL,
              PRIMARY KEY (`menu_id`)
            ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

            --
            -- Dumping data for table `tm_menu`
            --

FYU 我包含了示例数据,请不要介意它包含的语言

    INSERT INTO `tm_menu` (`menu_id`, `menu_name`, `menu_desc`, `menu_link`, `item_id`, `item_pos`, `parent_id`, `created_by`, `updated_by`, `created_on`, `updated_on`, `ip`, `status`) VALUES
    (1, 'à®®à¯à®•பà¯à®ªà¯', NULL, '', 1, '0', 0, NULL, NULL, NULL, NULL, NULL, 1),
    (2, 'நமத௠வரலாறà¯', 'பழநà¯à®¤à®®à®¿à®´à®°à¯ வரலாற௠மà¯à®¤à®²à¯ தறà¯à®•ாலத௠தமிழர௠வரை அறிநà¯à®¤à¯ கொளà¯à®µà¯‹à®®à¯', 'set3cd15f8f2940aff879df34df4e5c2cd1', 2, '0', 0, NULL, NULL, NULL, NULL, NULL, 1),
    (3, 'மொழிகளà¯', 'பனà¯à®©à¯†à®Ÿà¯à®™à¯à®•ாலம௠தொடà¯à®Ÿà¯ இபà¯à®ªà¯‹à®¤à¯ வரையிலà¯à®®à¯, தமிழோட௠கலநà¯à®¤ மொழிகள௠மறà¯à®±à¯à®®à¯ தறà¯à®ªà¯‹à®¤à¯ தமிழகதà¯à®¤à®¿à®²à¯ பேசபà¯à®ªà®Ÿà¯à®®à¯ மொழிகளà¯, மறà¯à®±à¯à®®à¯ மொழி வழகà¯à®•à¯à®•ள௠பறà¯à®±à®¿à®¯ தகவல௠களஞà¯à®šà®¿à®¯à®®à¯', 'setf3e334d42863e8250c7d03efefbfd387', 3, '0', 0, NULL, NULL, NULL, NULL, NULL, 1),
    (4, 'மகà¯à®•ளà¯', 'கல௠தோனà¯à®±à®¿ மண௠தோனà¯à®±à®¾ காலதà¯à®¤à¯‡ தோனà¯à®±à®¿à®¯ நம௠மொழியின௠மாநà¯à®¤à®°à¯à®•ளà¯, பரவி வாழà¯à®®à¯ à®®à¯à®±à¯ˆ பறà¯à®±à®¿à®¯ தகவல௠திரடà¯à®Ÿà¯', 'set12a032ce9179c32a6c7ab397b9d871fa', 4, '0', 0, NULL, NULL, NULL, NULL, NULL, 1),
    (5, 'தமிழ௠மனà¯à®©à®°à¯à®•ளà¯', 'பெரà¯à®žà¯à®šà¯‹à®±à¯à®±à¯à®¤à®¿à®¯à®©à¯ சேரலாதன௠காலம௠தொடà¯à®Ÿà¯ தமிழின௠வழியாக கோலோசà¯à®šà®¿à®¯ மாமனà¯à®©à®°à¯à®•ள௠பறà¯à®±à®¿à®¯ வரலாறà¯', 'set75c2af9d944a14ccbf79b39bf9c3a338', 5, '0', 0, NULL, NULL, NULL, NULL, NULL, 1),
    (6, 'கலைகளà¯', 'தமிழர௠வழி வநà¯à®¤ ஆய கலைகள௠அறà¯à®ªà®¤à¯à®¤à¯ நானà¯à®•à¯à®®à¯ (௬௪), அதனைக௠கரைகணà¯à®Ÿ மனிதரà¯à®•ளà¯à®®à¯', 'set96930e61e073920d9327ad9b3ab58071', 6, '0', 0, NULL, NULL, NULL, NULL, NULL, 1),
    (7, 'à®®à¯à®¤à®±à¯à®šà®™à¯à®• காலமà¯', NULL, 'setb9aafae93ae640481cd3c38350f7ed99', 7, '0', 11, NULL, NULL, NULL, NULL, NULL, 1),
    (8, 'இடைசà¯à®šà®™à¯à®• காலமà¯', NULL, 'set6afa2460019e37b04f04ff903df462d1', NULL, '2', 11, NULL, NULL, NULL, NULL, NULL, 1),
    (10, 'Menu', NULL, 'dd', NULL, '8', 8, NULL, NULL, NULL, NULL, NULL, 1),
    (9, 'கடைச௠காலமà¯', NULL, 'set529e895d6ea5dee9ce1c5bef7012e9a1', NULL, NULL, 11, NULL, NULL, NULL, NULL, NULL, 1),
    (11, 'சஙà¯à®• காலமà¯', 'சஙà¯à®• காலம௠எனà¯à®ªà®¤à¯ கி.à®®à¯. 2ம௠நூறà¯à®±à®¾à®£à¯à®Ÿà®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ கி.பி. 2ம௠நூறà¯à®±à®¾à®£à¯à®Ÿà¯ வரை. இநà¯à®¤à®•௠கால கடà¯à®Ÿà®¤à¯à®¤à®¿à®²à¯ ஆடà¯à®šà®¿ செயà¯à®¤ தமிழ௠மனà¯à®©à®°à¯à®•ளைப௠பறà¯à®±à®¿ மிகக௠கà¯à®±à¯ˆà®µà®¾à®© தகவலà¯à®•ளே கிடைதà¯à®¤à¯à®³à¯à®³à®©.', 'setcbfcdf6865b58d28c232b6a5ec27b550', NULL, NULL, 2, NULL, NULL, NULL, NULL, NULL, 1),
    (12, 'சேரரà¯à®•ளà¯', 'à®®à¯à®±à¯à®•ாலச௠சேரரà¯à®•ளைப௠பறà¯à®±à®¿ மிகவà¯à®®à¯ அரிதாகவே செயà¯à®¤à®¿à®•ள௠உளà¯à®³à®©, ஆனால௠சஙà¯à®• காலச௠சேரரà¯à®•ளைப௠பறà¯à®±à®¿ சிறிதளவ௠செயà¯à®¤à®¿à®•ள௠உளà¯à®³à®©', 'set63252149fe05360f32cb3e9c4385e932', NULL, '1', 5, NULL, NULL, NULL, NULL, NULL, 1),
    (14, 'பாணà¯à®Ÿà®¿à®¯à®°à¯à®•ளà¯', 'இநà¯à®¤à¯ சமà¯à®¤à¯à®¤à®¿à®°à®¤à¯à®¤à®¿à®²à¯ மூழà¯à®•ிவிடà¯à®Ÿà®¤à¯†à®©à®•௠கரà¯à®¤à®ªà¯à®ªà®Ÿà¯à®®à¯ கà¯à®®à®°à®¿à®•à¯à®•ணà¯à®Ÿà®¤à¯à®¤à®¿à®²à¯ 72 நாடà¯à®•ளà¯à®®à¯ தலைநகராக தெனà¯à®®à®¤à¯à®°à¯ˆà®¯à¯à®®à¯ விளஙà¯à®•ியதà¯. பாணà¯à®Ÿà®¿à®¯ மனà¯à®©à®°à¯à®•ளின௠தலைநகராக விளஙà¯à®•ிய இதà¯à®¤à¯†à®©à¯à®®à®¤à¯à®°à¯ˆ கடறà¯à®•ோளினால௠அழிவà¯à®±à¯à®±à®¤à¯.இகà¯à®•டறà¯à®•ோளில௠அழியாத௠இரà¯à®¨à¯à®¤à¯ எஞà¯à®šà®¿à®¯ நாடà¯à®•ளின௠தலைநகராக கபாடபà¯à®°à®®à¯ விளஙà¯à®•ியதà¯.இரணà¯à®Ÿà®¾à®®à¯ கடறà¯à®•ோளால௠அநà¯à®¨à®¾à®Ÿà¯à®®à¯ அழிவà¯à®±à¯à®±à®¤à¯.இவà¯à®µà®´à®¿à®µà®¿à®©à¯ பினà¯à®©à®°à¯ தறà¯à®ªà¯‹à®¤à¯à®³à¯à®³ மதà¯à®°à¯ˆ பாணà¯à®Ÿà®¿à®¯à®°à¯à®•ளின௠தலைநகராயிறà¯à®±à¯. பாணà¯à®Ÿà®¿à®¯ மனà¯à®©à®°à¯à®•ளால௠தமிழà¯à®šà¯ சஙà¯à®•ம௠வைதà¯à®¤à¯ தமிழ௠வளரà¯à®•à¯à®•பà¯à®ªà®Ÿà¯à®Ÿà®¤à¯.', 'set96442866e22d7aa54d31c360bac83c5e', NULL, '3', 5, NULL, NULL, NULL, NULL, NULL, 1),
    (15, 'பலà¯à®²à®µà®°à¯à®•ளà¯', 'தமிழ௠நாடà¯à®Ÿà®¿à®²à¯ கி.பி நானà¯à®•ாம௠நூறà¯à®±à®¾à®£à¯à®Ÿà¯ தொடகà¯à®•ம௠மà¯à®¤à®²à¯ பதà¯à®¤à®¾à®®à¯ நூறà¯à®±à®¾à®£à¯à®Ÿà®¿à®©à¯ தொடகà¯à®•ம௠வரை à®à®±à®¤à¯à®¤à®¾à®´ 700 வரà¯à®Ÿà®™à¯à®•ள௠ஆடà¯à®šà®¿ பà¯à®°à®¿à®¨à¯à®¤à®©à®°à¯. இவரà¯à®•ளத௠ஆடà¯à®šà®¿ தமிழகதà¯à®¤à®¿à®©à¯ வரலாறà¯à®±à®¿à®²à¯ பலà¯à®µà¯‡à®±à¯ à®…à®®à¯à®šà®™à¯à®•ளில௠திரà¯à®ªà¯à®ªà¯à®®à¯à®©à¯ˆà®¯à®¾à®• அமைநà¯à®¤à®¤à¯ எனலாமà¯. எனினà¯à®®à¯ இவரà¯à®•ளà¯à®Ÿà¯ˆà®¯ தோறà¯à®±à®®à¯ பறà¯à®±à®¿ நமà¯à®ªà®¤à¯à®¤à®•à¯à®¨à¯à®¤ தகவலà¯à®•ள௠இனà¯à®©à¯à®®à¯ கிடைகà¯à®•விலà¯à®²à¯ˆ. இவரà¯à®•ள௠தமிழரà¯à®•ளே என à®'ர௠பிரிவினர௠நிறà¯à®µ à®®à¯à®¯à®², வேற௠சிலர௠இவரà¯à®•ளà¯, தமிழகதà¯à®¤à¯à®•à¯à®•௠வெளியிலிரà¯à®¨à¯à®¤à¯ வநà¯à®¤ தமிழரலà¯à®²à®¾à®¤ இனதà¯à®¤à®µà®°à¯à®•ள௠எனà¯à®•ினà¯à®±à®©à®°à¯. இவரà¯à®•ள௠மூலதà¯à®¤à¯ˆà®¤à¯ தெனà¯à®©à®¿à®¨à¯à®¤à®¿à®¯à®¾à®µà®¿à®²à¯ மடà¯à®Ÿà¯à®®à®©à¯à®±à®¿à®ªà¯ பாரசீகமà¯, ஈழம௠போனà¯à®± பகà¯à®¤à®¿à®•ளிலà¯à®®à¯ ஆயà¯à®µà®¾à®³à®°à¯à®•ள௠தேடியà¯à®³à¯à®³à®¾à®°à¯à®•ளà¯. à®®à¯à®±à¯à®•ாலப௠பலà¯à®²à®µà®°à¯à®•ள௠வெளியிடà¯à®Ÿ சாசனஙà¯à®•ளின௠மொழி மறà¯à®±à¯à®®à¯ அவறà¯à®±à®¿à®©à¯ உளà¯à®³à®Ÿà®•à¯à®•à®™à¯à®•ளை வைதà¯à®¤à¯, இவரà¯à®•ள௠இநà¯à®¤à®¿à®¯à®¾à®µà®¿à®©à¯ வடபகà¯à®¤à®¿à®¯à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ வநà¯à®¤ à®'ர௠பிராமணகà¯à®•à¯à®Ÿà®¿à®¯à®¿à®©à®°à¯ எனà¯à®±à¯ சிலர௠கரà¯à®¤à¯à®•ிறாரà¯à®•ளà¯. பிறà¯à®•ாலதà¯à®¤à®¿à®²à¯ அரசியல௠நிலைமைகளைக௠கரà¯à®¤à¯à®¤à®¿à®²à¯ கொணà¯à®Ÿà¯ பலà¯à®²à®µà®°à¯à®•ள௠தமிழ௠மொழியின௠பயனà¯à®ªà®¾à®Ÿà¯à®Ÿà¯ˆ à®à®±à¯à®±à¯à®•à¯à®•ொணà¯à®Ÿà®¤à®¾à®•த௠தெரிகிறதà¯.', 'set2883c92900dc63b1d8c69bb9824b7f96', NULL, '4', 5, NULL, NULL, NULL, NULL, NULL, 1),
    (16, 'மறà¯à®±à®µà®°à¯à®•ளà¯', 'சேர சோழ பாணà¯à®Ÿà®¿à®¯ பலà¯à®²à®µà®°à¯ அலà¯à®²à®¾à®¤ மனà¯à®©à®°à¯à®•ளà¯, கà¯à®±à¯ நில மனà¯à®©à®°à¯à®•ளà¯', 'set2015c864ee11b1299e6440d8a2bfacda', NULL, '5', 5, NULL, NULL, NULL, NULL, NULL, 1),
    (17, 'பிற மொழிகளà¯', '', 'set6e3338a3f3b9f21f5086563b912eaee7', NULL, NULL, 3, NULL, NULL, NULL, NULL, NULL, 1),
    (18, 'மொழி வழகà¯à®•à¯à®•ளà¯', '', 'set38de43659e6c6de074b139179b400b6c', NULL, NULL, 3, NULL, NULL, NULL, NULL, NULL, 1),
    (13, 'சோழரà¯à®•ளà¯', '', '8cd76b2615a3c5f364cbbc0e78852efe', NULL, '2', 5, NULL, NULL, NULL, NULL, NULL, 1);

提前致谢。

【问题讨论】:

  • 我在这里失去了你menu should be like
  • 有什么问题...你试过什么?
  • 也许我应该包含一张图片来解释我正在尝试的确切内容,我会在几秒钟内包含它

标签: php mysql menu drop-down-menu


【解决方案1】:

您需要学习如何有效地将树存储在数据库中。

http://www.sitepoint.com/hierarchical-data-database/

【讨论】:

    【解决方案2】:

    我使用递归函数来做到这一点,类似于:

    function get_pages ($parent_id='') {
      if ($parent_id == '') {     // if first call to function there's no parent id
        $pages = list of pages from db //use your own code here to pull all cats with no parent
      }
      else {
        $pages = list of pages with $parent_id as their parent_id
      }
    
      echo "<ul>";  //open list
      foreach ($result as $page) {
        echo "<li><a href=' << path to this page >> '></li>";
        $query = code to check for pages with this page as their parent
        if (query returns a result - ie there are sub pages) {
          get_pages($page['id']);  // this is the key, the function calls itself passing the current page as the parent so it only gets the sub pages
        }
      }
      echo "</ul>";
    }
    
    
    
    }
    

    【讨论】:

      【解决方案3】:

      您应该为树状菜单使用嵌套集数据结构。它将节省大量的 sql 查询。

      在此处查看有关嵌套集的讨论:Searching for the best PHP nested sets class (PEAR class excluded)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-20
        • 2018-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-20
        相关资源
        最近更新 更多