Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    select ordinate in gruppi mysql

    Salve a tutti.
    Come posso fare per poter far apparire un menù dinamico a gruppi di riusltati suddiviso per regioni?
    Di seguito posto il codice che mi fa vedere la lista di tutti i risultati ma non suddivisi e ordinati per nome; tutto funziona, adesso mi chiedo se possso fare i gruppi dinamicamente sulla base dell'id regone già presente nella tabella da cui prendo i risultati utilizzando il valore"optgroup" che ho utilizzato in passato ma in html.

    ----------- Codice Mio ------------

    <?
    $idr="";
    print "<select name=id_village style='width:182px'>
    <option value=''style='width:166px'> Seleziona </option>
    <option value='%'style='width:166px'> Tutti i village </option>\n";
    $r=lista('village','order by nome');
    while($dati=mysql_fetch_array($r)){
    $idr[id_village]=$dati[id];
    $idr[bloccato]="no";
    $rt=trova($idr,'outlet_temp');
    if (mysql_num_rows($rt)>0) print "<option value=\"$dati[id]\">$dati[nome]</option>\n";
    }
    ?>

  2. #2
    Beh intanto la query dovresti farla con un order by che già predisponga i villaggi per regione

    codice:
    SELECT .... FROM Village WHERE ....ORDER BY idRegione, nome
    Dopodichè nel ciclo fai un controllo sul valore di idRegione del record corrente:
    se è diverso da quello del record precedente stampi un <optgroup>, altrimenti non lo stampi.

    Codice PHP:
    $previous_region = -1;

    while(
    $dati=mysql_fetch_array($r)){
       
       if(
    $previous_region != $dati['idregione']) //Ovviamente metti il nome giusto al posto di 'idRegione'
          
    print "<optgroup>" $dati['nomeRegione'] . "</optgroup>\n";
       
       
    $previous_region $dati['idregione'];
       
       
    $idr[id_village]=$dati[id];
       
    $idr[bloccato]="no";
       
    $rt=trova($idr,'outlet_temp');
       if (
    mysql_num_rows($rt)>0) print "<option value=\"$dati[id]\">$dati[nome]</option>\n";

    Come commentato, devi ovviamente sostituire 'idRegione' con il nome dell'attributo dell'id che indica la regione.
    Inoltre se vuoi stampare il nome della regione dovrai ovviamente fare una JOIN tra la SELECT dei villaggi, insieme alla tabella delle regioni, in modo da ottenere il nome delle stesse.

    Ciao

    PS - Ah comunque cerca di formulare meglio le domande e di includere il codice che riporti in un blocco delimitato dai tag giusti: [ php] e [/ php] (che io scrivo con gli spazi, altrimenti non te li stampa... guarda nella toolbar dell'editor di testo comunque...).

  3. #3
    Ok grazie per la celerità,
    adesso provo e poi ti faccio sapere.

  4. #4

    Funziona...

    Ho inserito il codice e funziona la suddivisione,
    adesso, visto che non sono molto esperto ti chiedo come posso fare a fare fare una JOIN tra la SELECT dei villaggi per avere il nome della regione?
    Non so come fare
    Grazie per l'aiuto

  5. #5
    Beh le due tabelle (villaggi, regioni) avranno qualcosa in comune.... immagino l'idRegione (chiave primaria per la tabella regioni; chiave esterna per la tabella villaggi) o qualcosa del genere.

    La sintassi della JOIN è semplice
    codice:
    SELECT .... 
     FROM tabella1 T1
     JOIN tabella2 T2
       ON T1.ChiaveEsterna = T2.ChiavePrimaria
    Semplicemente gli passi il campo della tabella 1 e 2 (abbreviate in T1 e T2) e lui le "unisce" (diciamo 'interseca') tramite quel campo.

    JOIN MySQL 5
    Tutorial sulla JOIN del linguaggio SQL

    Se non sai fare una JOIN ti consiglio caldamente di studiarti un pò di teoria relazionale.
    E' un pò pallosa all'inizio ma poi diventa facile e divertente....

    .... ed è fondamentale

  6. #6
    Grazie nuovamente per l'aiuto...
    ho capito in linea di massima il concetto e ho già dato uno sguardo al link che mi hai postato, adesso provo ad applicare quanto scritto.
    Per quanto riguarda lo studio hai pienamente ragione devo iniziare a studiare la cosa approfonditamente;
    sai consigliarmi qualche libro da seguire, il php, come un po' tutta la programmazione, lo seguo da 2 mesi in maniera autodidatta, ma voglio diventare + esperto.
    Ciao

  7. #7
    Mah libri io non ne ho mai usati.
    Ho studiato un pò a scuola.
    E poi molto autodidatta.

    Ho fatto molta esperienza con ASP, senza conoscere PHP.

    Poi PHP l'ho imparato semplicemente mettendomi a leggere il manuale online e facendo delle prove su ogni sezione.

    Per la teoria relazionale..... beh una qualunque guida presente su siti come HTML.it è sufficiente per iniziare.
    Con l'aiuto del Forum poi ti chiarisci i dubbi. E soprattutto, mettendo in pratica consolidi quello che capisci.

    Basta internet e tanta paziena per imparare 'quasi' qualunque cosa!

  8. #8
    Bhé quello che cerco di fare anch'io nel tempo libero...
    Ultima cortesia
    ho fatto credo come dici e ho stilato questo codice
    Codice PHP:
    SELECT nome_regione  FROM regioni JOIN village ON regioni.id village.id_village 
    ma ho degli errori potresti indicarmi dove sbaglio?
    Grazie per la pazienza
    CIao

  9. #9
    La sintassi sembra corretta.....
    Metti la query su più righe, eseguila e guarda a che linea ti dà l'errore.

    E riporta l'errore che sennò non so cosa cercare



    ....edit....

    ah, comunque.... regione.id dovrebbe essere associato (uguale) a village.idregione.
    Perchè village.id immagino sia l'id del villaggio, non della regione, no?

  10. #10
    opss. hai ragione avevo scritto male ho cambiato ma ho sempre il solito errore.
    questa è la riga incriminata
    SELECT nome_regione
    questo è l'errore
    Parse error: syntax error, unexpected T_STRING in /web/htdocs/www.miosito.it/home/ricmia.html on line 196

    posto tutto il codice che ho fatto
    Codice PHP:
    <?
    $idr
    ="";
    print 
    "<select name=id_village style='width:182px'>
    <option value=''style='width:166px'> Seleziona </option>
    <option value='%'style='width:166px'> Tutti i village </option>\n"
    ;
    $r=lista('village','order by id_regioni, nome');
    SELECT nome_regione  
    FROM regioni 
    JOIN village 
    ON regioni
    .id village.id_regioni;

    $previous_region = -1;
    while(
    $dati=mysql_fetch_array($r)){  
       if(
    $previous_region != $dati['id_regioni'])
          print 
    "<optgroup>" $dati['nome_regione'] . "</optgroup>\n";
       
       
    $previous_region $dati['id_regioni'];
       
       
    $idr[id_village]=$dati[id];
       
    $idr[bloccato]="no";
       
    $rt=trova($idr,'outlet_temp');
       if (
    mysql_num_rows($rt)>0) print "<option value=\"$dati[id]\">$dati[nome]</option>\n";
    }
    ?>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.