Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Suddivisione dei record di un db per giorno e tipo

    Salve,
    ho una domanda un po' complessa e spero che il codice che copio qui sotto sia comprensibile.
    Ho costruito la mia agenda, con gli eventi elencati giorno per giorno, ciascuno con un'icona che ne indica il tipo (concerto, sport ecc ...).
    Ora vorrei migliorarla raggruppando, all'interno di nuo stesso giorno, gli eventi per tipo (tutti i concerti, tutti gli eventi sportivi del giorno x, poi di seguito tutti i concerti, tutti gli eventi sportivi del giorno x+1 ecc...).
    Ho provato usando un array che contiene i tipi di eventi e inserendo un foreach ($categoria as $val) nel while principale (quello che crea i 7 giorni della settimana).
    In questo modo riesco a raggruppare gli eventi per tipo all'interno dei singoli giorni, proprio come desidero: l'unico inconveniente è che se in un determinato giorno non ci sono eventi di una certa categoria (ad es non ci sono concerti) lo script mi mostra lo stesso la categoria concerti (icona e spazio apposito) naturalmente senza voci.

    Non so come poter non visualizzare le categorie che in un determinato giorno non hanno eventi.

    L' if(mysql_num_rows($result) = 0) non funziona, perché il controllo sui giorni viene fatto dopo la query, quindi nel database ci possono benissimo essere n concerti (e quindi il numero di righe è diverso da 0) anche se nessuno è in quel giorno.

    Ah, nel db ho la data d'inizio, quella di fine e la frequenza delle evento (giornaliero, settimanale ecc...).

    Qualcuno sa darmi qualche consiglio?


    $oggi=date('Y-m-d', time());
    $day_count = 0;
    $giorni=array();

    while ($day_count < 7) {
    $a = time()+($day_count*86400);
    $giorno = date('l', $a);
    $days[$giorno]=$giorno;
    $ita_gior=array('Monday'=>'Lunedì', 'Tuesday'=>'Martedì', 'Wednesday'=>'Mercoledì',
    'Thursday'=>'Giovedì','Friday'=>'Venerdì', 'Saturday'=>'Sabato', 'Sunday'=>'Domenica');
    $oggi = date('Y-m-d', $a);
    foreach ($days as $key => $val) {
    $giorni=array_merge($days,$ita_gior);
    }
    echo "<tr bgcolor='#cccccc'><td colspan='2' class='ag_giorni'><a name='" . $giorni[$giorno] . "'>" . $giorni[$giorno] . "</a> " . date('j',$a) . "</u></td><td></td><td></td></tr>";

    $categorie = array('cine', 'conc', 'drink', 'teatro', 'sport', 'festa', 'disco', 'enogastr', 'cult', 'folk', 'arte');
    $icone = array('cine'=>'cinema.jpg', 'conc'=>'nota.jpg', 'drink'=>'drink.jpg', 'teatro'=>'teatro.jpg', 'sport'=>'sport.jpg', 'festa'=>'festa.jpg', 'disco'=>'disco.jpg', 'enogastr'=>'eno.jpg', 'cult'=>'cultura.jpg', 'folk'=>'mercato.jpg', 'arte'=>'arte.gif');

    foreach ($categorie as $val) {
    $somma=0;
    $queryb = "SELECT UNIX_TIMESTAMP(agenda.inizio) AS inizio, UNIX_TIMESTAMP(agenda.fine) AS fine, agenda.frequenza, agenda.locale, agenda.nome, agenda.tipo, agenda.id, agenda.pubblicare, agenda.cliente, agenda.citta, locali.indirizzo
    FROM agenda LEFT JOIN locali ON agenda.locale = locali.nome WHERE agenda.tipo LIKE '%$val%' AND agenda.pubblicare=1";

    $resultb = mysql_query($queryb, $db);
    echo "<tr><td valign='top'>[img]" . $icone[$val] . "[/img]: " . mysql_num_rows($resultb) . "<td colspan='3'>";

    while ($rowb = mysql_fetch_array($resultb)) {
    $b=$rowb['inizio'];
    $arr=array(date('Y-m-d',$b));
    while ($b<$rowb['fine']) {
    $b+=$rowb['frequenza']*86400;
    $arr[]=date('Y-m-d',$b);
    }
    if (in_array($oggi,$arr)) {
    $addendo=1;
    if ($rowb['cliente']==1) {
    echo "<span style='color:#000000;background-color:#FFFDCC' bgcolor='#FFFDCC'>";
    } else {
    echo "<span>";
    }
    echo "" . $rowb['nome'] . "" . $rowb['citta'] . ": " . $rowb['locale'];
    if (isset($rowb['indirizzo'])) echo " - " . $rowb['indirizzo'];
    echo "[b]"; ?>
    ')">info</span>

    <?php
    } else {
    $addendo=0;
    }
    $somma+=$addendo;
    }
    echo "</td></tr><tr><td colspan='4' align='right' valign='bottom'>$somma
    top</td></tr>
    <tr><td colspan='4'><hr></td></tr>";
    }
    $day_count++;
    }
    ?>

  2. #2

    Re: Suddivisione dei record di un db per giorno e tipo

    Ho aggiunto dei commenti al codice, per renderlo più chiaro, sperando che così qualcuno lo legga e possa magari darmi una mano.

    Grazie

    $oggi=date('Y-m-d', time());
    $day_count = 0;
    $giorni=array();

    /* primo while: creo i giorni della settimana in cui andranno gli eventi (i record del db) a seconda delle loro date di inizio, fine e della loro frequenza) */

    while ($day_count < 7) {
    $a = time()+($day_count*86400);
    $giorno = date('l', $a);
    $days[$giorno]=$giorno;
    $ita_gior=array('Monday'=>'Lunedì', 'Tuesday'=>'Martedì', 'Wednesday'=>'Mercoledì',
    'Thursday'=>'Giovedì','Friday'=>'Venerdì', 'Saturday'=>'Sabato', 'Sunday'=>'Domenica');
    $oggi = date('Y-m-d', $a);
    foreach ($days as $key => $val) {
    $giorni=array_merge($days,$ita_gior);
    }
    echo "<tr bgcolor='#cccccc'><td colspan='2' class='ag_giorni'><a name='" . $giorni[$giorno] . "'>" . $giorni[$giorno] . "</a> " . date('j',$a) . "</u></td><td></td><td></td></tr>";

    $categorie = array('cine', 'conc', 'drink', 'teatro', 'sport', 'festa', 'disco', 'enogastr', 'cult', 'folk', 'arte');
    $icone = array('cine'=>'cinema.jpg', 'conc'=>'nota.jpg', 'drink'=>'drink.jpg', 'teatro'=>'teatro.jpg', 'sport'=>'sport.jpg', 'festa'=>'festa.jpg', 'disco'=>'disco.jpg', 'enogastr'=>'eno.jpg', 'cult'=>'cultura.jpg', 'folk'=>'mercato.jpg', 'arte'=>'arte.gif');

    /* con questo foreach divido gli eventi/record per tipo all'interno di ogni giorno - in realtà creo per ogni giorno della settimana uno spazio per ogni tipo di evento: è qui che non riesco a controllare se in un certo giorno ci sono o no eventi di un certo tipo, perché se un evento deve o meno essere pubblicato in questo giorno lo stabilisco più sotto; ed è per questo che non riesco ad eliminare le categorie vuote */

    foreach ($categorie as $val) {
    $somma=0;
    $queryb = "SELECT UNIX_TIMESTAMP(agenda.inizio) AS inizio, UNIX_TIMESTAMP(agenda.fine) AS fine, agenda.frequenza, agenda.locale, agenda.nome, agenda.tipo, agenda.id, agenda.pubblicare, agenda.cliente, agenda.citta, locali.indirizzo
    FROM agenda LEFT JOIN locali ON agenda.locale = locali.nome WHERE agenda.tipo LIKE '%$val%' AND agenda.pubblicare=1";

    $resultb = mysql_query($queryb, $db);
    echo "<tr><td valign='top'>[img]" . $icone[$val] . "[/img]: " . mysql_num_rows($resultb) . "<td colspan='3'>";

    /* questo è il while che legge record per record il risultato della query e controlla se l'evento è da pubblicare in quel determinato giorno della settimana */

    while ($rowb = mysql_fetch_array($resultb)) {
    $b=$rowb['inizio'];
    $arr=array(date('Y-m-d',$b));
    while ($b<$rowb['fine']) {
    $b+=$rowb['frequenza']*86400;
    $arr[]=date('Y-m-d',$b);
    }
    if (in_array($oggi,$arr)) {
    $addendo=1;
    echo "<span>";
    echo "" . $rowb['nome'] . "" . $rowb['citta'] . ": " . $rowb['locale'];
    if (isset($rowb['indirizzo'])) echo " - " . $rowb['indirizzo'];
    echo "[b]"; ?>
    ')">info</span>

    <?php
    } else {
    $addendo=0;
    }
    $somma+=$addendo;
    }
    echo "</td></tr><tr><td colspan='4' align='right' valign='bottom'>$somma
    top</td></tr>
    <tr><td colspan='4'><hr></td></tr>";
    }
    $day_count++;
    }
    ?>

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.