MySql-groep door menu_id

Tabel definitie:

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 ;

Tabelgegevens:

--
-- Άδειασμα δεδομένων του πίνακα `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);

Tabel beperkingen:

--
-- Περιορισμοί για πίνακα `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;

Ik schrijf niet in PHP, zoiets doet dit



Kan ik dit met één vraag doen?

Dit wordt gedaan met één while-lus? Of twee?

2
Wat weerhoudt u ervan om één query uit te voeren SELECT * FROM submenu_cat ORDER BY menu_id, id en de pagina in een PHP-lus aan te maken?
toegevoegd de auteur ypercubeᵀᴹ, de bron

3 antwoord

$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 "\n";
       }
       print "\n";
}
2
toegevoegd
zo makkelijk .. ik moet meer dan 20 uur slapen ... Zo gemakkelijk denken lijkt me moeilijk .. Thx meneer ..
toegevoegd de auteur Chris P, de bron

U kunt dit doen door in één query met uw menu_id te selecteren en te bestellen.

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

Dan met een enkele resultaatlus.

Doorloop de output zoals:

//for loop

    if($menu_id != $last_menu_id){
   //close previous UL (if exists) ...
   //show new UL with id  

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

De voorbeeldcode:

<?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 '';
            $last_sub_menu =  $submenu_cat['menu_id'];
        ?>  
        

en het resultaat is

   
    
1
toegevoegd