-1

I just want to populate a multilevel dropdown menu which uses mysql and php using single table

sample menu url: http://www.vidiyarkarai.com/

(sorry for this i tried to include an image but i'm not allowed to upload images, please see the menu using above address, please never mind the language in that site...)

i just want to generate this type of menu using a single table, i did this using multiple tables which is not effective and slow in some cases, so i want to do it in a single table.

  /*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 i include the sample data, please never mind about the language included with it

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

Thanks in advance.

Kmanikandan
  • 121
  • 1
  • 1
  • 9

3 Answers3

0

I do this using a recursive function, something along the lines of:

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



}
Al_
  • 2,479
  • 7
  • 29
  • 43
0

You need to learn how to store trees in databases effectively.

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

Vladislav Rastrusny
  • 29,378
  • 23
  • 95
  • 156
0

You should use Nested Sets data structure for tree-like menus. It will save lots of sql queries.

See the discussion about Nested Sets here: Searching for the best PHP nested sets class (PEAR class excluded)

Community
  • 1
  • 1
Ilya Sheershoff
  • 409
  • 4
  • 10