BuonPomeriggio !
Ho un problema di logica al quale non ne vengo a capo da 3 gg.
Ho un database sqlite3
con 4 tabelle relazionate
che estraggo in php con dei cicli annidati
Il problema si pone ,perche devo rispettare la formattazione della tabella di visualizzazione dove ho un riga che è divisa in due colonne "Interventi e Materiali" che con la struttura che ho creato non riesco a combinare , se cambiassi la formattazione e mettessi i due campi in due righe diverse il tutto funzionerebbe . Considerando che i dati inseriti possono essere diversi fra loro .
Adesso la domanda è , secondo voi, come dovrei strutturare il tutto per avere il risultato voluto?
Ho un problema di logica al quale non ne vengo a capo da 3 gg.
Ho un database sqlite3
con 4 tabelle relazionate
Codice:
TABELLA "Cliente":
"Id": campo intero auto-incrementante e chiave primaria
"richiedente": campo di testo per indicare il richiedente
"indirizzo_lavori": campo di testo per indicare l'indirizzo dei lavori
TABELLA "schede":
"id": campo intero auto-incrementante e chiave primaria
"cliente_id": campo intero per collegare la scheda al cliente corrispondente (chiave esterna)
"data_richiesta": campo di testo per indicare la data di richiesta
"data_esecuzione": campo di testo per indicare la data di esecuzione
"totale": campo numerico per indicare il totale
Vincolo di chiave esterna: il campo "cliente_id" fa riferimento alla colonna "id" della tabella "Cliente"
TABELLA "interventi":
"id": campo intero auto-incrementante e chiave primaria
"scheda_id": campo intero per collegare l'intervento alla scheda corrispondente (chiave esterna)
"intervento": campo di testo per indicare l'intervento
"costo_intervento": campo numerico per indicare il costo dell'intervento
Vincolo di chiave esterna: il campo "scheda_id" fa riferimento alla colonna "id" della tabella "schede"
TABELLA "materiali":
"id": campo intero auto-incrementante e chiave primaria
"intervento_id": campo intero per collegare il materiale all'intervento corrispondente (chiave esterna)
"materiale_impiegato": campo di testo per indicare il materiale impiegato
"costo_materiale": campo numerico per indicare il costo del materiale
Vincolo di chiave esterna: il campo "intervento_id" fa riferimento alla colonna "id" della tabella "interventi"
che estraggo in php con dei cicli annidati
Codice:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
table {
width: 793.7008874px;
}
td {
border: 1px solid black;
padding: 10px;
}
</style>
<?php
$database = 'LavoriDB.db';
if (!file_exists($database)) {
$db = new SQLite3($database);
$db->exec('CREATE TABLE IF NOT EXISTS "Cliente" (
"Id" INTEGER PRIMARY KEY AUTOINCREMENT,
"richiedente" TEXT,
"indirizzo_lavori" TEXT
)');
$db->exec('CREATE TABLE IF NOT EXISTS "schede" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"cliente_id" INTEGER,
"data_richiesta" TEXT,
"data_esecuzione" TEXT,
"totale" REAL,
FOREIGN KEY(cliente_id) REFERENCES Cliente(id)
)');
$db->exec('CREATE TABLE IF NOT EXISTS "interventi" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"scheda_id" INTEGER,
"intervento" TEXT,
"costo_intervento" REAL,
FOREIGN KEY(scheda_id) REFERENCES schede(id)
)');
$db->exec('CREATE TABLE IF NOT EXISTS "materiali" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"intervento_id" INTEGER,
"materiale_impiegato" TEXT,
"costo_materiale" REAL,
FOREIGN KEY(intervento_id) REFERENCES interventi(id)
)');
$db->close();
}
echo "php";
$db = new SQLite3($database);
if (file_exists($database)) {
$query = "SELECT * FROM Cliente";
$result = $db->query($query);
while ($cliente = $result->fetchArray(SQLITE3_ASSOC)) {
echo '<table>
<tr>
<td colspan="1">'.$cliente['richiedente'].'</td>
<td colspan="2">'.$cliente['indirizzo_lavori'].'</td>
<td colspan="1">Intestazione </td>
</tr>
<tr>
<td colspan="2">Interventi</td>
<td colspan="2">Materiali</td>
</tr>';
$query_schede = "SELECT * FROM schede WHERE cliente_id = " . $cliente['Id'];
$result_schede = $db->query($query_schede);
while ($scheda = $result_schede->fetchArray(SQLITE3_ASSOC)) {
$data_richiesta = $scheda['data_richiesta'];
$data_esecuzione = $scheda['data_esecuzione'];
$totale = $scheda['totale'];
$query_interventi = "SELECT * FROM interventi WHERE scheda_id = " . $scheda['id'];
$result_interventi = $db->query($query_interventi);
while ($intervento = $result_interventi->fetchArray(SQLITE3_ASSOC)) {
echo "<tr>
<td colspan='2'>".$intervento['intervento']."</td>";
$query_materiali = "SELECT * FROM materiali WHERE intervento_id = " . $intervento['id'];
$result_materiali = $db->query($query_materiali);
while ($materiale = $result_materiali->fetchArray(SQLITE3_ASSOC)) {
$materiale_imp = $materiale["materiale_impiegato"];
$costo_materiale = $materiale["costo_materiale"];
echo "<td colspan='2'>Materiale: ".$materiale_imp."</td></tr>";
}
echo "";
}
}
}
}
?>
</head>
<body>
<h1>Tabella di esempio</h1>
<table>
<tr>
<td colspan="1">Cliente </td>
<td colspan="2">indirizzo lavori </td>
<td colspan="1">Intestazione </td>
</tr>
<tr>
<td colspan="2">Interventi</td>
<td colspan="2">Materiale</td>
</tr>
<tr>
<td colspan="2">$intervento['intervento']</td>
<td colspan="2">$materiale["materiale_impiegato"]</td>
</tr>
<tr>
<td colspan="1">Prima colonna</td>
<td colspan="1">Seconda colonna</td>
<td colspan="1">Terza colonna</td>
<td colspan="1">Quarta colonna</td>
</tr>
</table><br>
</body>
</html>
Il problema si pone ,perche devo rispettare la formattazione della tabella di visualizzazione dove ho un riga che è divisa in due colonne "Interventi e Materiali" che con la struttura che ho creato non riesco a combinare , se cambiassi la formattazione e mettessi i due campi in due righe diverse il tutto funzionerebbe . Considerando che i dati inseriti possono essere diversi fra loro .
Adesso la domanda è , secondo voi, come dovrei strutturare il tutto per avere il risultato voluto?