Stampare coppie di valori

  • Creatore Discussione Creatore Discussione felino
  • Data di inizio Data di inizio

felino

Utente Attivo
12 Dic 2013
940
10
18
Aci Catena (Catania)
Salve a tutti,
chiedo il vostro supporto.

Ho un tabella (settimana_schema) strutturato come:
id - giugno_1 - giugno_2 - giugno_3- giugno_4- giugno_5 - luglio_1- luglio_2- luglio_3- luglio_4 - luglio_5 - agosto_1 - agosto_2 - agosto_3 - agosto_4 - agosto_5 - settembre_1 - settembre_2- settembre_3- settembre_4- settembre_5
dove tranne il campo ID si tratta di campi DATE.

La mia esigenza è far visualizzare i valore in coppia, mi spiego:
giugno_1 - giugno_2
giugno_2 - giugno_3
giugno_3 - giugno_4
giugno_4 - giugno_5
giugno_5 - luglio_6

Praticamente ci sono quasi, funziona tutto tranne per l'ultima colonna:
1) ho dichiarato un array che contiene esattamente i mesi di mio interesse;
2) ricavo il nome delle colonne presenti nel database;
3) rimuovo i campi che contengono valori del tipo 0000-00-00
4) visualizzo solo il giorno per ogni campo
5) l'obiettivo finale è ottenere una tabella di questo tipo:


Giugno Luglio Agosto Settembre
01-08 08-15 15-22 22-29 29-06 06-13 13-20 20-27 27-03 03-10 10-17 17-24 24-31 31-07 07-14 14-21 21-28 28-01

Il problema si presenta esattamente nell'ultimo campo, ove:
settembre_3 vale 2014-09-21
settembre_4 vale 2014-09-28
settembre_5 vale 0000-00-00

Quindi settembre dovrebbe fermarsi alla coppia 21-28, senza visualizzare l'ultima coppia.

Per far tutto ciò ho usato il seguente codice:

PHP:
        <?php
            $array_mesi = array('giugno', 'luglio', 'agosto', 'settembre');
            foreach($array_mesi as $mese){
                //PRELEVO LO SCHEMA DELLA TABELLA
                $q_settimana = mysql_query("SELECT COLUMN_NAME
                                            FROM INFORMATION_SCHEMA.COLUMNS
                                            WHERE table_name = 'settimane_schema'
                                            AND table_schema = 'fiorellamalagnino'
                                            AND column_name LIKE '".$mese."%'") or die ( mysql_error() );
                //MI COSTRUISCO LA QUERY
                //STRINGA di appoggio per il nome delle colonne di quel mese (giugno_1, giugno_2, etc...)
                $eln_sett = "";
                while($r_settimana = mysql_fetch_array($q_settimana)){
                
                    $eln_sett .= $r_settimana[0].',';
                    //STRINGA per avere sempre il nome delle colonne
                    $eln_sett_gg .= $r_settimana[0].',';
                }
                //RIMUOVO LA VIRGOLA DALL'ULTIMO ELEMENTO
                $eln_sett = substr_replace($eln_sett, "", -1);
                
                //QUERY PER VERIFICARNE IL VALORE;
                $q_verifica = mysql_query("SELECT ".$eln_sett." FROM settimane_schema WHERE id = 1 ") or die ( mysql_error() );
                $r_verifica = mysql_fetch_array($q_verifica);
                              
                $count_sett = 0;
                
                //CONTEGGIO PER IL COLUMN SPAN
                foreach (array_unique($r_verifica) as $sett_stato){

                    if($sett_stato != 0000-00-00){ $count_sett++; }
                
                }
                
                echo '<td colspan="'.$count_sett.'" align="center" class="disp_mese">'.ucfirst($mese).'</td>';
                
            }
        ?>
        </tr>
        <!-- GIORNI -->
        <tr>
        <?php
            $eln_sett_gg = substr_replace($eln_sett_gg, "", -1);
                                   
            $q_giorni = mysql_query("SELECT ".$eln_sett_gg." FROM settimane_schema WHERE id = 1") or die ( mysql_error() );
                                            
            $r_giorni = mysql_fetch_array($q_giorni);
                        
             //Rimuovo gli elmenti vuoti, cioè 0000-00-00
             $r_giorni = array_diff($r_giorni,array('0000-00-00'));  
             
             $r_giorni = array_values(array_unique($r_giorni));
                          
                $eln_sett_gg_single = explode(",", $eln_sett_gg);
                               
                foreach($r_giorni as $key => $val){

                       $date = date("d",strtotime($val));
                      
                       $date_next = date("d",strtotime($r_giorni[$key+1]));                   
                    
                       echo '<td style="padding: 3px" align="center"><font size="1"><span style="font-size:92%">'.$date.'-'.$date_next.'</span></font></td>';
                }
        ?>            
        </tr>
        <tr>
</table>

Spero che sia strato chiaro.
 
Ultima modifica:
ciao, un po' complicato da seguire ma essendo l'ultimo elemento,
potrebbe essere che il foreach abbia terminato e tu, con key+1, vada a prendere un valore successivo che non esiste

foreach($r_giorni as $key => $val){
...... strtotime($r_giorni[$key+1]));
ciao
marino
 
L'obiettivo finale è realizzare qualcosa di simile a questo: link.

Quindi ho pensato di modificare la struttura della tabelal settimana_schema in:
ID - PeriodName - Start - End

esempio:
1 - giugno_1 - 31/06/2014 - 07/06/2014

cosa ne pensate?

Da lì viene meglio effettuare anche la relativa visualizzazione.

Grazie.
 
Ragazzi, alla fine ho rifatto l'intera tabella settimana_schema come:

id - checkin - checkout

così da avere la doppia coppia di lavori.

Anche se avrei potuto usare una solo colonna dato che checkin è uguale all'ultimo checkout inserito.
 

Discussioni simili