Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    143

    Suddividere record in ordine alfabetico

    Il titolo del topic non è molto chiaro, ma non ho trovato niente di meglio per sintetizzare quanto segue.

    Vorrei chiedervi se esiste un modo più ordinato, rispetto al codice sotto, per suddividere i record estrapolati da mysql, in tre blocchi suddivisi in ordine alfabetico (che andranno a riempire tre campi select).

    Primo blocco: tutti i nomi che iniziano da A ad H
    Secondo blocco: tutti i nomi che iniziano da I a P
    Terzo blocco: tutti i nomi che iniziano da Q a Z

    Il codice che uso è questo:

    Codice PHP:
    //Estrazione dei nomi che iniziano con A fino ad H
    $nomi_ah_sql $data->query("SELECT nome FROM persone WHERE nome REGEXP '^[A-H]' ORDER BY nome ASC");

    while(
    $nomi_ah_obj $data->estrai($nomi_ah_sql)){
      
    $nome_ah $nomi_ah_obj->nome;
    }

    //Estrazione dei nomi che iniziano con I fino a P
    $nomi_ip_sql $data->query("SELECT nome FROM persone WHERE nome REGEXP '^[I-P]' ORDER BY nome ASC");

    while(
    $nomi_ip_obj $data->estrai($nomi_ip_sql)){
      
    $nome_ip $nomi_ip_obj->nome;
    }

    //Estrazione dei nomi che iniziano con Q fino a Z
    $nomi_qz_sql $data->query("SELECT nome FROM persone WHERE nome REGEXP '^[Q-Z]' ORDER BY nome ASC");

    while(
    $nomi_qz_obj $data->estrai($nomi_qz_sql)){
      
    $nome_qz $nomi_qz_obj->nome;

    Ho quindi tre query e tre cicli while, uno per ogni blocco di nomi. C'è qualche modo per semplificare il tutto, magari riducendo il codice ad un solo ciclo while, pur mantenendo le tre query? Oppure dite che va bene così?

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Ma... vuoi solo fare una lista in cui "spezzi" i dati in base alle iniziali? Perchè se è così secondo me può andar bene, altrimenti puoi pensare a piccole alternative... p.es. fai un SELECT del primo che inizia per I e dell'ultimo per P... tutti i primi vanno nel primo blocco, i secondi in mezzo e i terzi nell'ultimo

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    143
    Non ho capito

    In pratica a me serve un elenco alfabetico di nomi disposto su tre campi select invece di uno, per non creare una lista infinita di voci, scomoda per l'utente che deve cercare/selezionare un certo nome.

    Volevo evitare di creare tre cicli semplicemente per rendere il codice più "pulito". Però, se mi dici che così va bene e non ci sono problemi, mi fido e vado avanti

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Va bene... se vuoi "semplificare" dipende anche da come usi poi i risultati... se per esempio poi fai dei cicli per generare dei tag "OPTION" in html, potresti anche fare un'unica SELECT e DENTRO il ciclo in php per generare i tag verifichi:
    - appena un nome inizia con "I" passi al secondo blocco
    - appena un nome inizia con "Q" passi al terzo blocco

    In questo caso avresti un'unica SELECT, un ciclo PHP (anzichè forse 3 come ora, ma non so cosa fai in realtà: è un'ipotesi) e due "semplici" if all'interno.

  5. #5
    Assolutamente NON fare 3 query quando ne basta una.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2006
    Messaggi
    143
    Va bene... se vuoi "semplificare" dipende anche da come usi poi i risultati... se per esempio poi fai dei cicli per generare dei tag "OPTION" in html, potresti anche fare un'unica SELECT e DENTRO il ciclo in php per generare i tag verifichi:
    - appena un nome inizia con "I" passi al secondo blocco
    - appena un nome inizia con "Q" passi al terzo blocco

    In questo caso avresti un'unica SELECT, un ciclo PHP (anzichè forse 3 come ora, ma non so cosa fai in realtà: è un'ipotesi) e due "semplici" if all'interno.
    La soluzione che mi hai proposto adesso l'ho capita perfettamente e non avrei problemi a metterla in pratica, se non fosse che non stampo i risultati direttamente in php, ma assegno delle variabili che passo alle librerie di smarty (template engine) per la parte in html.

    Se usassi dei semplici echo non avrei problemi a risolvere con degli if, ma ho una cosa di questo tipo:

    Codice PHP:
    //Estrazione dei nomi che iniziano con A fino ad H
    $nomi_ah_sql = ............

    while(......

    //Estrazione dei nomi che iniziano con I fino a P
    $nomi_ip_sql = .............

    while(......


    //Estrazione dei nomi che iniziano con Q fino a Z
    $nomi_qz_sql = ...........

    while(..................

    //Assegno la variabile per smarty
        
    $smarty->assign ("nome_ah"$nome_ah);
        
    $smarty->assign ("nome_ip"$nome_ip);
        
    $smarty->assign ("nome_qz"$nome_qz); 
    Poi nel file html faccio così:

    Codice PHP:
    <select width="130">
      <
    option>Nomi A-H</option>
      {
    section name="foo" loop=$nome_ah}
        <
    option>{$nome_ah[foo]}</option>
      {/
    section}
    </
    select>    

    <
    select width="130">
      <
    option>Nomi I-P</option>
      {
    section name="foo" loop=$nome_ip}
        <
    option>{$nome_ip[foo]}</option>
      {/
    section}
    </
    select>    
                                           
    <
    select width="130">
      <
    option>Nomi Q-Z</option>
      {
    section name="foo" loop=$nome_qz}
        <
    option>{$nome_qz[foo]}</option>
      {/
    section}
    </
    select
    Questo codice così strutturato mi risulta abbastanza difficile da gestire, soprattutto perchè è la prima volta che uso un template engine, e anche perchè non sono assolutamente esperto di programmazione.

    Se hai 5 minuti di tempo, se ti va e se ritieni questo tipo di impostazione uno scempio, ti sarei davvero grato se mi aiutassi a capire come modificarlo a dovere. In ogni caso ti ringrazio per l'aiuto che mi hai già dato

    Assolutamente NON fare 3 query quando ne basta una.
    Lo so che si dovrebbe limitare il numero di query, ma in certi casi, come questo ad esempio, mi perdo totalmente in km di codice superfluo.

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.