Visualizzazione risultati 1 fino 8 di 8

Discussione: ordinare i risultati di una query

  1. #1
    Guest

    Predefinito ordinare i risultati di una query

    ordinare i risultati di una query
    nella tabella menu ho due campi

    xxxx,aaaa

    nella tabella link ho 5 campi due associati a xxxx e 3 associati a aaaa

    il risultato della query vorrei che fosse una cosa del genere


    xxxx
    ->1111
    ->2222
    ->3333
    aaaa
    ->4444
    ->5555

    come posso fare???

    questa è la query

    Codice PHP:

    Codice PHP:

    <table align="center" width="100%">
    <?php
    $sqlmenu
    ="SELECT * FROM menu JOIN link_menu ON menu.idmenu = link_menu.idmenu ORDER BY link_menu.nome_link ASC";
    $resmenu = mysql_query($sqlmenu) or die("Impossibile caricare i menu: ".mysql_error());

    while (
    $rowmenu = mysql_fetch_array($resmenu))
    {
    ?>

    <tr>
    <td><?php echo $rowmenu['menu']." ".$rowmenu['nome_link']; ?></td>
    </tr>
    <?php
    }
    ?>
    </table> Il risultato della query è questo
    aaaa a
    aaaa aaaa
    asas Anno 2006
    asas Anno 2007
    asas Anno 2008


    io vorrei che il risultato fosse

    aaaa(menu)
    a(link)
    aaaa(link)

    poi

    asas(menu)
    anno 2006(link)
    anno 2007(link)
    anno 2008(link)


    come devo fare per stampare

    menu1 con sotto il link collegati
    menu2 con link (ecc)


    Non so se sono stato chiaro cosa voglio fare.

    Grazie

  2. #2
    Guest

    Predefinito

    No, non ho capito! Spiegati un pò meglio!

  3. #3
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Nemmeno io ho capito granché, provo a darti qualche dritta:
    - nella clausola ORDER BY puoi specificare più campi: in questo caso, l'ordinamento avverrà sulla base del primo campo e, in subordine (ovvero, quando nel primo campo ci sono valori uguali) sulla base del secondo campo, quindi del terzo, e così via
    - tieni presente che quello che estrai dal database sono sempre tabelle, e non strutture complesse come alberi o grafi. Dovrai quindi creare una query che estragga le informazioni in una forma tabellare, e quindi "decifrarla" attraverso PHP per ottenere la reale struttura che ti serve...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  4. #4
    Guest

    Predefinito

    praticamente io ho una tabella menu e una tabella link che gestisco dall'area risevata

    inserisco il menu e poi il link collogandolo al menu

    la struttura della tabella menu

    Codice:
    TABLE `menu` (
      `idmenu` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `menu` varchar(50) NOT NULL,
      `iduser` int(10) NOT NULL,
      `ordine` int(10) NOT NULL,
      PRIMARY KEY (`idmenu`),
      UNIQUE KEY `menu` (`menu`),
      UNIQUE KEY `ordine` (`ordine`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
    
    
    TABLE `link_menu` (
      `idlink` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `nome_link` varchar(50) NOT NULL,
      `idmenu` int(10) NOT NULL,
      `visite` int(20) NOT NULL DEFAULT '0',
      `iduser` int(10) NOT NULL,
      PRIMARY KEY (`idlink`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

    dalla query mi dovrebbe uscire

    Codice PHP:
    <tr>
    <td><?php echo $menu?></td>
    </tr>
    <tr>
    <td><?php echo $link ?></td>
    </tr>

    //il tutto dentro un ciclo che mi stampi il menu con i link collegati


    io all'inizio avevo fatto in un altro modo

    avevo fatto due query

    la prima che mi leggeva i menu e la seconda che mi i link

    query
    while
    {
    recupero i dati menu (idmenu, nomemenu)

    stampo nome menu

    query2(legge i dati dai link con condizione where idmenu=$idmenu)
    stampo i dati
    }

    funziona ma ha un prob. i risultati dei menu li ordina mentre i risultati dei link non li ordina.


    Ho postato il codice su un altro form e mi hanno detto di usare JOIN perchè è piu veloce l'esecuzione.

    Solo che con JOIN non riesco a stampare i risultati come voglio io.

    dal ciclo dovrebbe uscire

    menu
    link
    link
    ecc.
    menu2
    link2
    link2

    e cosi via

    mentre mi esce

    menu->link
    menu->link
    menu->link

    menu2->link2
    menu2->link2
    menu2->link2



    non so se mi sono spegato bene ma spero di essere stato chiaro
    Ultima modifica di musicanapoli : 09-05-2010 alle ore 22.47.09 Motivo: Codice racchiuso tra i tags.

  5. #5
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Più o meno sì, si è capito. E conferma i sospetti che avevo: stai cercando di estrarre direttamente una struttura gerarchica da qualcosa che può fare solamente viste tabellari.

    Puoi usare PHP per decifrare i risultati, sfruttando l'ordinamento della tabella. La query che devi eseguire dovrebbe essere questa:
    Codice:
    SELECT *
    FROM menu INNER JOIN linkmenu ON menu.idmenu = linkmenu.idmenu
    ORDER BY menu.ordine, link_menu.idlink
    Quando stampi la tabella, devi confrontare ogni riga con quella precedente: se sono diversi i campi menu.idmenu tra le due righe, devi stampare anche la struttura relativa al menu. In caso contrario, stampi solo la voce del menu (la parte più a destra della tabella risultato).

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  6. #6
    Guest

    Predefinito

    ho fatto cosi ma non va bene

    mi stampa sempre

    menu->link
    menu->link
    menu->link

    menu2->link2
    menu2->link2
    menu2->link2

    cosa devo modificare?

    Codice PHP:
    <table align="center" width="100%">
    <?php

    $sqlmenu
    ="SELECT * FROM menu INNER JOIN link_menu ON menu.idmenu = link_menu.idmenu ORDER BY menu.ordine, link_menu.idlink";
    //$sqlmenu="SELECT * FROM menu JOIN link_menu ON menu.idmenu = link_menu.idmenu ORDER BY link_menu.nome_link ASC";
    $resmenu = mysql_query($sqlmenu) or die("Impossibile caricare i menu: ".mysql_error());

    while (
    $rowmenu = mysql_fetch_array($resmenu))
    {
    if (
    $rowmenu['menu'] != $temp)
    $row = $temp = $rowmenu['menu'];
    else
    $row = '-->';

    ?>

    <tr>
    <td><?php echo $rowmenu['menu']." ".$rowmenu['nome_link']; ?></td>
    </tr>
    <?php
    }
    ?>
    </table>

  7. #7
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Direi che ha più senso stampare la variabile $row nella cella, visto che ne decidi il contenuto sulla base della riga precedente, giusto...? Tu invece stai continuando a stampare il campo $rowmenu['menu'] così come preso dal database...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  8. #8
    Guest

    Predefinito

    Prova così

    Codice PHP:
    <?php
    $sqlmenu
    ="SELECT * FROM menu INNER JOIN link_menu ON menu.idmenu = link_menu.idmenu ORDER BY menu.ordine, link_menu.idlink";
    $resmenu = mysql_query($sqlmenu) or die("Impossibile caricare i menu: ".mysql_error());

    $temp = '';

    while (
    $rowmenu = mysql_fetch_array($resmenu)){
    if (
    $rowmenu['menu'] != $temp){
    echo
    '<br>'.strtoupper($rowmenu['menu']).'<br>';
    echo
    '&nbsp;->&nbsp;'.$rowmenu['nome_link'].'<br>';
    }else{
    echo
    '&nbsp;->&nbsp;'.$rowmenu['nome_link'].'<br>';
    }

    $temp = $rowmenu['menu'];
    }
    ?>
    Hai come output questo:

    Codice:
    MENU1
     -> link1
     -> link2
    
    MENU2
     -> link3
     -> link4
     -> link5

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •