- Home
- Categorie
- Coding e Sistemistica
- Coding
- Stampare coppie di valori
-
Stampare coppie di valori
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_6Praticamente ci sono quasi, funziona tutto tranne per l'ultima colonna:
- ho dichiarato un array che contiene esattamente i mesi di mio interesse;
- ricavo il nome delle colonne presenti nel database;
- rimuovo i campi che contengono valori del tipo 0000-00-00
- visualizzo solo il giorno per ogni campo
- l'obiettivo finale è ottenere una tabella di questo tipo:
[TABLE="class: affitti"]
[TD="class: disp_mese, align: center"]Giugno[/TD]
[TD="class: disp_mese, colspan: 4, align: center"]Luglio[/TD]
[TD="class: disp_mese, colspan: 5, align: center"]Agosto[/TD]
[TD="class: disp_mese, colspan: 4, align: center"]Settembre[/TD]
[/TR][TD="align: center"]01-08[/TD]
[TD="align: center"]08-15[/TD]
[TD="align: center"]15-22[/TD]
[TD="align: center"]22-29[/TD]
[TD="align: center"]29-06[/TD]
[TD="align: center"]06-13[/TD]
[TD="align: center"]13-20[/TD]
[TD="align: center"]20-27[/TD]
[TD="align: center"]27-03[/TD]
[TD="align: center"]03-10[/TD]
[TD="align: center"]10-17[/TD]
[TD="align: center"]17-24[/TD]
[TD="align: center"]24-31[/TD]
[TD="align: center"]31-07[/TD]
[TD="align: center"]07-14[/TD]
[TD="align: center"]14-21[/TD]
[TD="align: center"]21-28[/TD]
[TD="align: center"]28-01[/TD]
[/TR]
[/TABLE]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-00Quindi 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>
[/PHP]Spero che sia strato chiaro.
-
L'obiettivo finale è realizzare qualcosa di simile a questo: [url=http://www.costedelsud.it/case-vacanza/casa-023/preventivo.asp]link.
Quindi ho pensato di modificare la struttura della tabelal settimana_schema in:
ID - PeriodName - Start - Endesempio:
1 - giugno_1 - 31/06/2014 - 07/06/2014cosa ne pensate?
Da lì viene meglio effettuare anche la relativa visualizzazione.
Grazie.
-
Visto il risultato finito si capisce meglio.
Personalmente però non userei mysql per definire le settimane, dato che il calendario non dipende da dati variabili.
Ma probabilmente mi sfugge tutto il resto della logica.
-
Esatto, avrei dovuto postare il link al primo post.
In che senso? Cosa useresti o come dovrei definirli?
Grazie.
-
Non trovo utile memorizzare la data del lunedì e della domenica, dato che è possibile calcolarle con un solo comando php.
Fa più al caso tuo il comando strtotime. Ti faccio un esempio[php]
$tOggi = strtotime('2014-01-05');
$tsLunedi = strtotime('Next Monday', $tOggi);
print date('d F Y', $tsLunedi);
[/php]
Questo restituisce la data di lunedì prossimo assumendo che oggi sia il 5 gennaio 2014.
-
Ottimo, non conoscevo questa funzione.
Ma nel mio caso, il tutto serve a settare se in quella settimana (in dettaglio solo i mesi da giugno a settembre) un appartamento è libero o no.Non mi serve sempre un riferimento al database?
-
Non è obbligatorio. E non capisco come una tabella del genere ti possa aiutare, ma ti ripeto che non conosco il resto del tuo progetto.
Puoi usare una tabella per gli appartamenti, ed una per gli affitti. In questo modo puoi memorizzare più affitti per ogni appartamento.
La tabella degli affitti può essere strutturata in:
ID
ID_APPARTAMENTO riferimento all'id nella tabella appartamenti
DATA_INIZIO Identifica la settimana memorizzando il primo giorno.
-
Il mio progetto mira a realizzare quello che è presente nel link.
Io ho tre tabelle:
- Struttura: id - struttura;
- Periodi: id - name - start - end
- Booking: id - id_struttura - id_periodo - status
Così potrebbe andar bene?
-
Certo che può funzionare.
Buon lavoro e in bocca al lupo
.
-
Preferisco perchè che i campi START e AND della tabella PERIODI vengano inseriti a priori anzichè essere calcolati dinamicamente.
Vi tengo aggiornati!

-
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.