Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    105

    [Codeigniter]Ordinare record prelevati da database, ottimizzazione

    Salve a tutti,
    sto facendo un gestionale con php, a livello amatoriale. Vi spiego come è strutturato in maniera rapida:
    ho una tabella, turni_svolti, con i seguenti campi: id, id_utente, id_ambiente, settimana, data.
    Premetto che sto usando un framework, CodeIgniter, ma sono ancora un novellino.
    Con queste righe di codice:
    Codice PHP:
    class turni_model extends CI_Model
    {
        
        public function  
    turni_settimanali($num_sett)
        {
            
    $result $this->db->get_where('turni_svolti', array('settimana' => $num_sett));
            
    $array = array();
            if (
    $result->num_rows() > 0){
            foreach (
    $result->result() as $row)
                {
                    if(
    $row->id_utente == 1){
                        
    $array['alberto'] = array(
                            
    'id_utente' => $row->id_utente,
                            
    'id_ambiente' => $row->id_ambiente.'.png',
                            
    'data' => date("d/m"strtotime($row->data))
                        ); 
                        }else{
                        
    $array['alberto'] = array(
                            
    'id_ambiente' => '0.gif',
                            
    'data' => 'nessuno'
                        
    );
                        }
                    if(
    $row->id_utente == 2){
                        
    $array['gaetano'] = array(
                            
    'id_utente' => $row->id_utente,
                            
    'id_ambiente' => $row->id_ambiente.'.png',
                            
    'data' => date("d/m"strtotime($row->data))
                        );
                        }else{
                        
    $array['gaetano'] = array(
                            
    'id_ambiente' => '0.gif',
                            
    'data' => 'nessuno'
                            
    );
                        }
                    if(
    $row->id_utente == 3){
                        
    $array['giulio'] = array(
                            
    'id_utente' => $row->id_utente,
                            
    'id_ambiente' => $row->id_ambiente.'.png',
                            
    'data' => date("d/m"strtotime($row->data))
                        );
                        }else{
                        
    $array['giulio'] = array(
                            
    'id_ambiente' => '0.gif',
                            
    'data' => 'nessuno'
                            
    );
                        }
                    if(
    $row->id_utente == 4){
                        
    $array['salvatore'] = array(
                            
    'id_utente' => $row->id_utente,
                            
    'id_ambiente' => $row->id_ambiente.'.png',
                            
    'data' => date("d/m"strtotime($row->data))
                        );
                        }else{
                        
    $array['salvatore'] = array(
                            
    'id_ambiente' => '0.gif',
                            
    'data' => 'nessuno'
                            
    );
                        }
                }
            }else{
                        
    $array['alberto'] = array(
                            
    'id_ambiente' => '0.gif',
                            
    'data' => 'nessuno'
                            
    );
                        
    $array['gaetano'] = array(
                            
    'id_ambiente' => '0.gif',
                            
    'data' => 'nessuno'
                            
    );
                        
    $array['giulio'] = array(
                            
    'id_ambiente' => '0.gif',
                            
    'data' => 'nessuno'
                            
    );
                        
    $array['salvatore'] = array(
                            
    'id_ambiente' => '0.gif',
                            
    'data' => 'nessuno'
                            
    );
            }
            return 
    $array;
        }

    Mi sistemo in array tutti i dati prelevati dal db, nel caso in cui un dato corrispondente ad una persona non è stato trovato viene settato un array neutro.
    Ecco i miei 2 dubbi/problemi.

    1)Esiste un altro modo per sistemare i dati prelevati, senza dover ripetere tutte quelle volte il ciclo if? Anche cambiando la logica di conservazione.

    2)E poi in questo codice ho notato che se esistono più turni effettuati nella stessa data mi popola l'array solo con un record(l'ultimo).

    Non sono sicuro di essere stato chiarissimo, spero abbiate capito!!
    Grazie mille Anticipatamente

    Saluti Satore11

  2. #2
    Ciao,
    al posto degli if puoi usare uno switch, quello che metti negli else lo metti nel clausola default.

    Per qunato riguarda il discroso dei turni multipli bisognerebbe capire tutta la logica dei dati e la loro struttura per capire il problema.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    105
    Ciao, grazie per la risposta,
    avevo pensato pure io a questa soluzione, solo che per ogni if corrisponde un else perchè l'array "neutro" e riferito comunque alla singola persona, mentre nel caso in cui sostituisco tutta la struttura con uno switch il default mi memorizzerebbe sempre lo stesso array, e comunque in caso di switch non processo tutti gli utenti, nel senso che se nel db sono presenti 2 turni effettuati in una data settimana, gli utenti che non hanno svolto nessun turno non verranno processati, quindi l'array passato all'uscita dalla variabile così facendo avrà solo i dati effettivamente presenti nel db. Purtroppo è un po complessa la situazione spero di essere stato chiaro, se mi viene in mente qualche altra soluzione la posto subito!

    Grazie
    Saluti Satore11

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Codice PHP:
    class turni_model extends CI_Model 

         
        public 
    $turni = array();
        public 
    $nomi = array('alberto','gaetano','giulio','salvatore');
        
        public function  
    turni_settimanali($num_sett
        { 
            
    $result $this->db->get_where('turni_svolti', array('settimana' => $num_sett)); 
            foreach (
    $result->result() as $row
                
    $this->turni[] = array( 
                            
    'id_utente' => $row->id_utente
                            
    'nome_utente' => $this->nomi[$row->id_utente-1],
                            
    'id_ambiente' => $row->id_ambiente.'.png'
                            
    'data' => date("d/m"strtotime($row->data)) 
                        ); 
            return 
    $this->turni
        } 
        
        
        public function 
    ottieni_turni_di($nome){
            
    $return = array();
            
            foreach(
    $this->turni as $turno) if($turno['nome_utente']==$nome$return[] = $turno;
            
            return 
    $return;
            
        }

    Io lo svilupperei riunendo tutti i turni in un array e dando ad ognuno di essi il nome di chi l'ha svolto nel caso ci si trovi male con l'id, qui ti ho mostrato un esempio non testato

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    105
    Ho risolto, ed è una cosa simile al tuo!
    lo posto per i posteri che avranno un problema simile al mio:
    Codice PHP:
    class turni_model extends CI_Model
    {
        
        public function  
    turni_settimanali($num_sett)
        {
            
    $result $this->db->get_where('turni_svolti', array('settimana' => $num_sett));
            
    $array = array();
            
    /*
             * Ho inserito un array con tutti i nomi degli utenti con le chiavi corrispondenti
             * poi nello switch sotto ad ogni caso tolgo da questo array il valore con l'indice
             * dell'utente che ha svolto il turno
             */
            
    $utenti = array(
                
    => 'alberto',
                
    => 'gaetano',
                
    => 'giulio',
                
    => 'salvatore'
            
    );
            if (
    $result->num_rows() > 0){
            foreach (
    $result->result() as $row)
                {
                switch (
    $row->id_utente) {
                    case 
    1:
                        
    $array['alberto'] = array(
                            
    'id_utente' => $row->id_utente,
                            
    'id_ambiente' => $row->id_ambiente.'.png',
                            
    'data' => date("d/m"strtotime($row->data))
                        );
                        unset(
    $utenti[$row->id_utente]);

                        break;
                    
                    case 
    2:
                        
    $array['gaetano'] = array(
                            
    'id_utente' => $row->id_utente,
                            
    'id_ambiente' => $row->id_ambiente.'.png',
                            
    'data' => date("d/m"strtotime($row->data))
                        );
                        unset(
    $utenti[$row->id_utente]);

                        break;
                    
                    case 
    3:
                        
    $array['giulio'] = array(
                            
    'id_utente' => $row->id_utente,
                            
    'id_ambiente' => $row->id_ambiente.'.png',
                            
    'data' => date("d/m"strtotime($row->data))
                        );
                        unset(
    $utenti[$row->id_utente]);

                        break;
                    
                    case 
    4:
                        
    $array['salvatore'] = array(
                            
    'id_utente' => $row->id_utente,
                            
    'id_ambiente' => $row->id_ambiente.'.png',
                            
    'data' => date("d/m"strtotime($row->data))
                        );
                        unset(
    $utenti[$row->id_utente]);

                        break;

                    default:
                        
    //esce semplicemente
                        
    break;
                    }
                }
            
            }else{
                    
    //nel caso in cui i record trovati sono zero
                        
    $array['alberto'] = array(
                            
    'id_ambiente' => '0.gif',
                            
    'data' => 'nessuno'
                            
    );
                        
    $array['gaetano'] = array(
                            
    'id_ambiente' => '0.gif',
                            
    'data' => 'nessuno'
                            
    );
                        
    $array['giulio'] = array(
                            
    'id_ambiente' => '0.gif',
                            
    'data' => 'nessuno'
                            
    );
                        
    $array['salvatore'] = array(
                            
    'id_ambiente' => '0.gif',
                            
    'data' => 'nessuno'
                            
    );
                 }
                 
                 
    /*
                  * Questo secondo ciclo serve a settare neutri gli array
                  * degli utenti che non hanno svolto nessun turno
                  */
                 
    foreach ($utenti as $row) {
                        
    $array[$row] = array(
                            
    'id_ambiente' => '0.gif',
                            
    'data' => 'nessuno'
                            
    );
                 }
                            
            return 
    $array;
        }

    Fatemi sapere come vi sembra.

    Grazie mille

    Saluti Satore11

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.