Buongiorno a tutti,
avrei un form che scrive su due tabelle sql collegate:
come mi è stato suggerito infatti ho una tabella master e una slave.
praticamente mi trovo che quando dal form ricevo i dati e li scrivo sulle due tabella sql, in alcuni casi con una unica query INSERT INTO, ad un singolo id_master possono corrispondere vari id_slave.
la tabella html che visualizza i dati delle due tabelle collegate, viene quindi generata da una select con left join e ovviamente possono riportare varie righe dove il valore id_master è identico e accanto, la colonna id_slave invece ha valori progressivi univoci.
Bene. Sperando che serva a farmi capire vi mostro le due colonne alle quali ne seguono ovviamente altre ma che non ho incluso nello screenshot.

Il punto è che i dati riportati su questa tabella html sono il risultato della Query e del ciclo while che ripete la funzione fetch_assoc per ogni record finché ce ne sono, ma essendo che nella select c'è una join tra due tabelle, ovviamente quando ci sono id master uguali, il ciclo si ripete ugualmente perché poi ovviamente ci sono altri campi che riportano valori diversi che devo essere consultati; quindi non posso aggregare dati con funzioni sql.
Dovendo quindi agire con php, vorrei ottenere una unione delle celle che nei record consecutivi hanno lo stesso valore, per rendere anche più leggibile la tabella stessa giocando con i bordi delle celle.
Questo è lo script che genera la tabella html attuale coi dati prelevati dal database
//blocco query al database
$select_sql="SELECT
gbgar_serv_master.id_master,
id,
autista,
stato,
data,
tipologia,
macchina,
servizi_da_svolgere,
note
FROM gbgar_serv_master
LEFT JOIN gbgar_serv_slave
ON gbgar_serv_master.id_master=gbgar_serv_slave.id_master
WHERE
data between DATE_ADD(CURDATE(), INTERVAL -30 DAY)
and DATE_ADD(CURDATE(), INTERVAL 3 DAY);";
//controllo sull'avvenuta esecuzione della query al database
$risultato_select=$Conn->query($select_sql);
if($risultato_select == FALSE){
die("Errore nell'esecuzione della query: " . $select_sql);
}
/*echo"<pre>";
print_r($risultato_select);
echo"</pre>";*/
//blocco di creazione intestazione tabella
echo"<h1>Servizi assegnati agli autisti</h1>";
echo
"<div class=\"table\">
<table class=\"serv\">
<thead>
<th class='id-reg'>ID MASTER</th>
<th class='id-reg'>ID SERVIZIO</th>
<th class='autista'>AUTISTA</th>
<th class='s_d_t_m'>STATO</th>
<th class='s_d_t_m'>DATA</th>
<th class='s_d_t_m'>TIPOLOGIA</th>
<th class='s_d_t_m'>MACCHINA</th>
<th class='s_n'>SERVIZI DA SVOLGERE</th>
<th class='s_n'>NOTE</th>
</thead>";
/*impostazione ciclo di prelievo dei records
col metodo fetch_assoc viene prelevata una riga alla volta secondo i criteri impostati nelle condizioni "where" della select.*/
while($records = $risultato_select->fetch_assoc()){
$id_registro=$records["id_master"];
$id_servizio=$records["id"];
$autista=$records["autista"];
$stato=$records["stato"];
$data=$records["data"];
$tipologia=$records["tipologia"];
$macchina=$records["macchina"];
$servizio_da_svolgere=$records["servizi_da_svolgere"];
$note=$records["note"];
//conversione formato data
$timestamp_data = strtotime($data);
$formato_data = 'd / m / Y';
$newdate = date($formato_data,$timestamp_data);
//genero e visualizzo il corpo della tabella
echo"<tr>
<td class='id-reg'>$id_registro</td>
<td>$id_servizio</td>
<td>$autista</td>
<td>$stato</td>
<td>$newdate</td>
<td>$tipologia</td>
<td>$macchina</td>
<td>$servizio_da_svolgere</td>
<td>$note</td>
</tr>";
}
echo"</table>"; //chiusura della class tabella
echo "</div>"; // chiusura del div class table
$Conn->close();
?>
</body>
</html>
Spero che mi possiate aiutare perché non ho trovato molti suggerimenti googolando, non so neppure se sia possibile francamente.
Cosi a naso direi che il ciclo while dovrebbe leggere il valore corrispondente alla chiave ID_MASTER e se quella successiva è uguale non deve generare la cella ..... ma in che maniera? booohh .
Vabbhe spero qualcuno mi possa schiarire le idee in merito.
Grazie comunque e buona giornata a tutti.
Filippo P.