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

    Ordinare array per alfabeto

    Salve

    Ho un database di locali che prevede una colonna col nome del locale

    Vorrei creare una lista di select che abbiano come option la prima lettera dei locali e poi il nome del locale stesso, in pratica:

    A
    Albergo da Gino

    B
    B&B Margherita
    B&B Zuzzurellone

    ecc ecc

    come posso dire, però, nella query mysql di prendermi tutti i locali raggruppati per la prima lettera del nome del locale stesso?

    ho fatto la stessa cosa per Regione e Province e sono riuscito a ottenere il risultato sperato così

    Codice PHP:
    <?
    $num
    =mysql_num_rows(mysql_query("select * from guida_locali"));
    echo 
    "<option style=\"color: ffffff;\" value=\"\">Scegli la tua zona</option>";
    echo 
    "<option disabled=\"disabled\" value=\"\">";
    $query_reg=mysql_query("select distinct(nome_locale) from guida_locali where stato = 'italia' order by regione asc");
    while (
    $regioni mysql_fetch_array($query_reg)) {
    $regione $regioni['regione'];
    $num_prov=mysql_num_rows(mysql_query("select * from guida_locali where regione = '$regione'"));
    echo 
    "<option style=\"color: f6ff00;\" value=\"$regione&amp;tipo=R\">$echa_regione ($num_prov)</option>";
    $query_prov=mysql_query("select distinct(provincia) from guida_locali where regione = '$regione' order by provincia asc");
    while (
    $province mysql_fetch_array($query_prov)) {
    $provincia $province['provincia'];
    $num_prov=mysql_num_rows(mysql_query("select * from guida_locali where provincia = '$provincia'"));
    echo 
    "<option value=\"$provincia&amp;tipo=P\">$provincia ($num_prov)</option>";
    }
    echo 
    "<option disabled=\"disabled\" value=\"\">";
    }
    ?>
    ma per questa query non ho idee...

  2. #2
    Uhm ... io estrarrei tutto in un array e lavorerei su quello, innanzi tutto. Magari puoi ordinarlo con sort() e poi tramite foreach controllo se la prima lettera del locale e' uguale a quella precedente, in caso contrario si trattera' di un nuovo "paragrafo" con una nuova lettera, altrimenti stampera' il nome del locale sotto a quelli gia' scritti...

  3. #3
    il problema è che è una lista di 400 e passa locali e la query è abb lenta...

    non c'è una istruzione sul 'where' o sul 'having' che stabilizzi di prendere il primo carattere di un valore?

  4. #4
    ho abbozzato

    Codice PHP:
    <select name="select" class="select_rosso">
    <?
    $num
    =mysql_num_rows(mysql_query("select * from guida_locali"));
    echo 
    "<option style=\"color: ffffff;\" value=\"\">Scegli il tuo locale</option>";
    echo 
    "<option disabled=\"disabled\" value=\"\">";
    $query_reg=mysql_query("select distinct(nome_locale) from guida_locali where stato = 'italia' order by nome_locale asc");
    while (
    $regioni mysql_fetch_array($query_reg)) {
    $valore $regioni['nome_locale'];
    $iniziale substr($valore,0,1);
    $num_prov=mysql_num_rows(mysql_query("select * from guida_locali where nome_locale like '$iniziale%'"));
    echo 
    "<option style=\"color: f6ff00;\" value=\"$iniziale&amp;tipo=A\">$iniziale ($num_prov)</option>";
    $query_prov=mysql_query("select distinct(nome_locale) from guida_locali where nome_locale like '$iniziale%' order by nome_locale asc");
    while (
    $province mysql_fetch_array($query_prov)) {
    $locale $province['nome_locale'];
    echo 
    "<option value=\"$locale&amp;tipo=B\">$locale</option>";
    }
    echo 
    "<option disabled=\"disabled\" value=\"\">";
    }
    ?>
    </select>
    Solo che in questo modo mi stampa a video elenchi multipli.. ovvero, se ho 2 locali con la Z, mi echerà 2 volte:

    Z
    Locale 1
    Locale 2

    Z
    Locale 1
    Locale 2

    c'è un modo per evitarlo?

  5. #5
    Proprio perche' sono tanti locali forse ti conviene lavorare sugli array, invece che fare query multiple... fai una sola query di selezione globale, butti tutto dentro un array e lavori solo su quello. Il codice da te postato non e' molto efficiente, ci sono sotto-query all'interno del ciclo di un fetch_array...

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da Queer
    il problema è che è una lista di 400 e passa locali e la query è abb lenta...

    non c'è una istruzione sul 'where' o sul 'having' che stabilizzi di prendere il primo carattere di un valore?
    select * from tabella where campo like 'a%'

  7. #7
    Originariamente inviato da nicola75ss
    select * from tabella where campo like 'a%'
    Questo l'avevo già scritto

    mi servirebbe una istruzione che, a priori, selezioni la prima lettera, senza dichiararla

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ah scusa. Ero di fretta e non avevo letto tutto.

    Vedi se questo thread ti è d'aiuto.
    http://forum.html.it/forum/showthrea...ghlight=elenco

  9. #9
    non mi è molto chiara l'altra discussione...

    riesci ad abbozzarmi una soluzione ad-hoc per il mio script?

  10. #10
    ok così funge

    Codice PHP:
    <select name="select" class="select_rosso">
    <?
    $num
    =mysql_num_rows(mysql_query("select * from guida_locali"));
    echo 
    "<option style=\"color: ffffff;\" value=\"\">Scegli il tuo locale</option>";
    echo 
    "<option disabled=\"disabled\" value=\"\">";
    $alfabeto = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','X','Y','Z');
    foreach(
    $alfabeto as $lettera) {
    $num_prov=mysql_num_rows(mysql_query("select * from guida_locali where nome_locale like '$lettera%'"));
    if (
    $num_prov 0) {
    echo 
    "<option style=\"color: f6ff00;\" value=\"$lettera&amp;tipo=A\">$lettera ($num_prov)</option>";
    $regioni=mysql_fetch_array(mysql_query("select nome_locale from guida_locali where nome_locale like '$lettera%' order by nome_locale asc"));
    $query_prov=mysql_query("select distinct(nome_locale) from guida_locali where nome_locale like '$lettera%' order by nome_locale asc");
    while (
    $province mysql_fetch_array($query_prov)) {
    $locale $province['nome_locale'];
    echo 
    "<option value=\"$locale&amp;tipo=B\">$locale</option>";
    }
    echo 
    "<option disabled=\"disabled\" value=\"\">";
    }
    }
    ?>
    </select>

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.