php,Mysql查询创建一个下拉菜单


php, Mysql query to create a dropdown menu

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

示例菜单url: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`
            --

仅供参考,我包括样本数据,请不要介意中包含的语言

    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);

提前谢谢。

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

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

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

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>";
}

}

对于树状菜单,应该使用嵌套集数据结构。它将保存大量的sql查询。

请参阅此处关于嵌套集的讨论:搜索最佳PHP嵌套集类(PEAR类除外)