Dunque, devo mostrare solo la "prossima apertura straordinaria" di un negozio, quindi solo una data che deve avere queste come carattaristiche:
- deve essere una domenica oppure nel db deve essere definita come apertura straordinaria
- la data deve essere la più piccola, cioè la prossima (ORDER BY)
- la data deve essere anche maggiore di quella attuale (ossia deve essere una data futura rispetto ad oggi. Per questo ho usato la differenza tra date)
Come vedete qui sotto la query è corretta ma mi fa l'echo di tutti i risultati idonei, non solo del primo.
Se metto la clausola LIMIT 1 non mostra niente (va in conflitto con l'if relativo alla differenza tra date, credo); se invece porto l'if della differenza ed echo fuori dal ciclo while stampa solo una data ma in ordine opposto: infine cambiando a questo punto ORDER ASC in ORDER DESC non mostra nessun record!!
Come posso fare?
Questa la mia query:
Codice PHP:
<?php
//quando è domenica [weekday(Field71) = 6]
//oppure quando è apertura straordinaria [Field36 = 'si']
$aperture_straordinarie= "
SELECT *,
year(Field71) as anno,
month(Field71) as mese,
weekday(Field71) as giorno,
dayofmonth(Field71) as gg
FROM
Modulo_DataDyn_Entita_2
WHERE
(weekday(Field71) = 6 OR (Field36 = 'si'))
ORDER BY Field71 ASC";
$result = mysql_query($aperture_straordinarie);
$num_righe = mysql_num_rows($result);
if ($num_righe<1){
echo "<i>Aperture straordinarie non previste</i><br />";
}else{
while ($riga = mysql_fetch_assoc($result)) {
$anno=$riga["anno"];
$mese=$riga["mese"];
$mm=$arr_mesi[$mese];
$gg=$riga["gg"];
$giorno=$riga["giorno"];
$giorno_settimana=$arr_giorni[$giorno];
$dalle=$riga["Field33"];
$alle=$riga["Field34"];
$differenza =(strtotime("$anno/$mese/$gg") - strtotime(date("Y/m/d")))/(86400);
if ($differenza > 0){
echo "<div class=\"data\">$giorno_settimana $gg $mm</div> <div class=\"ora\">dalle $dalle:00 alle $alle:00</div><br style=\"clear:both\" />";
}
} //while
} // else
?>
grazie