Credo di aver capito l'errore. E' che lo stamp del dato lo metto FUORI dal while, quindi giustamente mi sfarfalla. Se lo metto dentro, però, fa ciò che chiedo, ma i risultati si ripetono (giustamente) 100 volte. come posso evitare questo loop?
(Ho modificato un po' l'assetto grafico, sostituendo UL con un hr)
Codice PHP:
//Lettura record
$result = site_query("SELECT dati.*, user.nome FROM dati LEFT JOIN user ON dati.stanza=user.id WHERE (dati.tipo = 'P' || dati.tipo = 'C') ORDER by id DESC LIMIT 0,1000", 'result');
$data_corrente = '';
while ($row = site_query($result, 'fetch'))
{
// prendiamo solo la data: "2022-01-01 23:59:59" -> "2022-01-01"
$data = substr($row['ora'], 0, 10);
if ($data != $data_corrente) {
// chiude la lista precedente, stampa la data, apre una nuova lista
if ($data_corrente) { echo "<hr>"; }
echo "<h2>" . site_format_date($data) . "</h2>";
$data_corrente = $data;
}
switch ($row['tipo'])
{
case 'P':
$add_dati.= '<div align="justify">';
$add_dati.= '<span class="time">'.site_format_time($row['ora']).'</span>';
$add_dati.= '<b>'.$row['mittente'].'</b>';
$add_dati.= '<span class="dato">'.$row['testo']).'</span>';
$add_dati.= '</div>';
break;
case 'C':
$add_dati.= '<div class="row_'.$row['tipo'].'" align="justify">';
$add_dati.= '<span class="time">'.site_format_datetime($row['ora']).'</span>';
$add_dati.= '<span class="dato">'.$row['testo_dato_completo'].'</span>';
$add_dati.= '</div>';
break;
} //switch
} //while
echo $add_dati;
site_query($result, 'free');