Salve, che query posso usare per vedere se la struttura della tabella_A differisce dalla struttura della tabella_B e sapere quali campi ha in più la tabella_B?
Grazie 1000
neorf
Salve, che query posso usare per vedere se la struttura della tabella_A differisce dalla struttura della tabella_B e sapere quali campi ha in più la tabella_B?
Grazie 1000
neorf
www.TriX.IT - Web Development
vuoi sapere quali campi hanno differenti oppure solo il numero di campi differenti??...la logica che mi viene in mente e quella di farti una piccola estrazione ( anche di 1 record ) poi con la mysql_fetch_array ti valorizza un'array, all'interno di questo array avrai i tuoi campi a db e i valori del singolo record estratto ( che non ti interessa ). fai la stessa cosa per l'altra tabella così avrai due array ArrayA ArrayB poi li usi a secondo del tipo di confronto che ti serve
mi interessa sapere quali campi la tabella_a contiene in più rispetto alla tabella_b.
quindi se tabella_a contiene:id,nome, indirizzo e la tabella_b contiene:id,nome, vorrei sapere che c'è indirizzo in +.
Spero di essermi spiegato.
ciao
neorf
www.TriX.IT - Web Development
dovresti usare due cicli
Ciclo su ArrayA indice = $a
Ciclo su ArrayB indice = $b
SE ArrayA[$a] <> ArrayB[$b]
Valorizzo ArrayC con nome tabella e nome campo
Fine SE
Fine Ciclo ArrayB
Fine Ciclo ArrayA
Pulisco variabili $a e $b.
Ciclo su ArrayB indice = $b
Ciclo su ArrayA indice = $a
SE ArrayB[$b] <> ArrayA[$a]
Accodo in ArrayC con nome tabella e nome campo
Fine SE
Fine Ciclo ArrayA
Fine Ciclo ArrayB
nel primo doppo ciclo cè il confronto dei campi dalla tabella A alla tabella B nel secondo ciclo doppio cè il confronto dei campi dalla tabella B alla A.
in ArrayC avrai nome tabella e nome campo
Esempio
Tab. A
Id Username Password Nome
Tab. B
Id Username Password Data
Array C
Tab. A Nome
Tab B Data
così sai che nella Tab.A cè presente il campo Nome che in B non è presente e nella tabella B è presente un campo di nome Data che non è presente nella tabella A.
naturalmente di questa logica non devi leggere il valore dei campi dell'array ma il nome del campo stesso
ok grazie 1000, ma questo se il campo diverso è l'ultimo?
se ho le 2 tabelle del tipo:
Tab. A
Id Username Genere Password
Tab. B
Id Provincia Username Password Data
quindi anche con quantità diversa di campi?
www.TriX.IT - Web Development
Conclusione mi sono fatto questo script, che non confronta direttamente 2 tabella di un Db, ma fa questo:
gli dai 1 db, ti trova tutte le tabelle e confronta quelle in base all'espresisone "explode". n
nel mio caso le tabelle vecchie iniziano con old_, quindi fa il confronto tra old_tabella_A e tabella_A.
stampa a video i numeri dei campi e nel caso in cui i campi differiscono stampa i valori dei nome dei campi, tutti, non solo quelli che differiscono
Codice PHP:
//elenca i nomi delle tabelle
$result = mysql_list_tables($db_name);
while ($riga = mysql_fetch_row($result)) {
// SINGOLA TABELLA
//IMPOSTO CONFRONTO TABELLE VECCHIE CON NUOVE
$exploso=explode("old_",$riga[0]);
if($exploso[0]=='')
{
//CONFRONTO TABELLE
$tab1=$exploso[1];
$tab2=$riga[0];
echo "
confroto tra: [b]$tab1[/b] , [b]$tab2[/b]
";
$res1 = mysql_query('select * from '.$tab1, $db_conn);
$res2 = mysql_query('select * from '.$tab2, $db_conn);
echo "
";
$numero_campi1=mysql_num_fields($res1);
$numero_campi2=mysql_num_fields($res2);
echo "<table>";
echo "<tr><td>TABELLA
$tab1
".$numero_campi1."</td><td>TABELLA
$tab2
".$numero_campi2."</td></tr>";
if($numero_campi1!=$numero_campi2) {
echo "<tr><td>";
for ($i=0; $i<$numero_campi1 ; $i++ ) {
$var1 = mysql_field_name($res1, $i);
//$row_title .= $var;
echo $var1.'
';
}
echo "</td><td>";
for ($i=0; $i<$numero_campi2 ; $i++ ) {
$var2 = mysql_field_name($res2, $i);
//$row_title .= $var;
echo $var2.'
';
}
echo "</td></tr>";
}
echo "</table>";
//CONFRONTO TABELLE
}
else {
//echo "tabella nuova, non old";
echo " - - - ";
}
}
www.TriX.IT - Web Development