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>