由menu_id组成的MySql组

Table definition:

CREATE TABLE IF NOT EXISTS `submenu_cat` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `menu_id` int(11) NOT NULL,
  `href` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
  `title` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
  `page_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `menu_id` (`menu_id`),
  KEY `page_id` (`page_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=8 ;

Table data:

--
-- Άδειασμα δεδομένων του πίνακα `submenu_cat`
--

INSERT INTO `submenu_cat` (`id`, `menu_id`, `href`, `title`, `page_id`) VALUES
(1, 2, 'educational_events', 'Εκπαιδευτικές Εκδηλώσεις', 1),
(2, 2, 'announcements', 'Ανακοινώσεις', 1),
(3, 2, 'party', 'Party-Χοροί', 1),
(4, 2, 'various', 'Λοιπές δραστηριότητες', 1),
(5, 3, 'dap_hmmy', 'Προτάσεις ΔΑΠ-ΝΔΦΚ ΗΜΜΥ', 1),
(6, 3, 'dap_emp', 'Προτάσεις ΔΑΠ-ΝΔΦΚ ΕΜΠ', 1),
(7, 3, 'dap_aei', 'Προτάσεις ΔΑΠ-ΝΔΦΚ ΑΕΙ', 1);

Table constraints:

--
-- Περιορισμοί για πίνακα `submenu_cat`
--
ALTER TABLE `submenu_cat`
  ADD CONSTRAINT `submenu_cat_ibfk_1` 
    FOREIGN KEY (`menu_id`) 
      REFERENCES `menu_cat` (`id`) 
    ON UPDATE CASCADE,
  ADD CONSTRAINT `submenu_cat_ibfk_2` 
    FOREIGN KEY (`page_id`) 
      REFERENCES `pages` (`id`) 
    ON UPDATE CASCADE;

I wont to write in php something like that executes this

<ul id="m2">
   <li><a href="">Εκπαιδευτικές εκδηλώσεις</a></li>
   <li><a href="">Ανακοινώσεις</a></li>
   <li><a href="">Party-Χοροί</a></li>
   <li><a href="">Λοιπές δραστηριότητες</a></li>
</ul>
<ul id="m3">
   <li><a href="">Προτάσεις ΔΑΠ-ΝΔΦΚ ΗΜΜΥ</a></li>
   <li><a href="">Προτάσεις ΔΑΠ-ΝΔΦΚ ΕΜΠ</a></li>
   <li><a href="">Προτάσεις ΔΑΠ-ΝΔΦΚ ΑΕΙ</a></li>
</ul>

Can I do this with one query?

This will be done with one while loop? Or two?

$result = mysql_query("SELECT menu_id,title FROM submenu_cat ORDER BY menu_id");

$last = -1;
while($result && $row = mysql_fetch_assoc($result)) {
   if ($last != $row['menu_id']) {
       if ($last != -1) {
           print "</ul>
";
       }
       print "<ul id=\"m{$row['menu_id']}\">
";
       $last = $row['menu_id'];
   } 
   print "  <li><a href=\"\">".htmlentities($row['title'])."</a></li>
";
}
if ($last != -1) {
   print "</ul>
";
}

You can do this by just selecting and ordering by your menu_id with one query.

SELECT menu_id, href, title, page_id FROM submenu_cat ORDER BY menu_id

Then with a single result loop.

Iterate through the output like:

//for loop

    if($menu_id != $last_menu_id){
    // close previous UL (if exists) </ul>...
    // show new UL with id  <ul id="...
    }

    echo <li>... // echo your link for the menu here using SQL values

// end for loop

You can do this with one loop. If you sort the result by menu_id

The example code:

<?php
    (($con = mysql_connect('localhost','root','password'))
        &&
        mysql_select_db('test',$con))
    ||
    die(mysql_errno());


    $query = mysql_query('select * from submenu_cat ORDER BY menu_id ASC');

    $last_sub_menu = 0;
    while($submenu_cat = mysql_fetch_assoc($query)) :
        if($isNew = !($last_sub_menu == $submenu_cat['menu_id'])): 
            if($last_sub_menu != 0)
                echo '</ul>';
            $last_sub_menu =  $submenu_cat['menu_id'];
        ?>  
        <ul id="m<?php echo $submenu_cat['menu_id'];?>">
            <?php endif;?>
        <li><a href="<?php echo $submenu_cat['href']?>"><?php echo $submenu_cat['title']?></a></li>
        <?php endwhile; ?>
    </ul>

and the result is

 <ul id="m2">
                <li><a href="educational_events">Εκπαιδευτικές Εκδηλώσεις</a></li>
            <li><a href="announcements">Ανακοινώσεις</a></li>
            <li><a href="party">Party-Χοροί</a></li>
            <li><a href="various">Λοιπές δραστηριότητες</a></li>
    </ul>  
    <ul id="m3">
                <li><a href="dap_hmmy">Προτάσεις ΔΑΠ-ΝΔΦΚ ΗΜΜΥ</a></li>
            <li><a href="dap_emp">Προτάσεις ΔΑΠ-ΝΔΦΚ ΕΜΠ</a></li>
            <li><a href="dap_aei">Προτάσεις ΔΑΠ-ΝΔΦΚ ΑΕΙ</a></li>
        </ul>