[PHP] Ordinamento DB multitabellare

piero60

Utente Attivo
26 Gen 2015
71
2
8
Salve a tutti,

Ho in un database 16 differenti tabelle le quali hanno diversi campi in comune,
uno di questi si chiama data_fine ed è un capo dove viene memorizzata una data
in formato ("Y-m-d")

il mio problema è di orinare e ricavare dei dati da queste 16 tabelle in ordine
di data crescente, in modo da visualizzare alcuni dati di ogni tabella nell'ordine
voluto.

Esempio:
la tabella 1 ha memorizzata la data "2016-5-10"
la tabella 4 ha memorizzata la data "2016-4-19"
la tabella 7 ha memorizzata la data "2016-6-11"
la tabella 2 ha memorizzata la data "2016-3-15"

ho bisogno di etrapolare i dati in ordine di data crescente, quindi dovrò visualizzare:
tabella 2 "2016 marzo 15" il contenuto dei campi che mi interessano
tabella 4 "2016 aprile 19" il contenuto dei campi che mi interessano
tabella 1 "2016 maggio 10" il contenuto dei campi che mi interessano
tabella 7 "2016 giugno 11" ecc.ecc.

ho provato ad eseguire una query di questo genere modificandola in diversi modi

PHP:
$query="SELECT * FROM evento1, evento2, evento12, evento16 ORDER BY data_fine ASC";
$result= mysql_query($query)or die (mysql_error());
while($row=mysql_fetch_array($result))
{
echo $row['data_fine'];// per cominciare a vedere se almeno mi visualizzava le date
}
In qualunque modo modifico la query mi restituisce il medesimo errore questo:
Column 'data_fine' in order clause is ambiguous

Se invece al posto di "ORDER BY data_fine ASC" faccio delle comparazioni riesco a ricavare
i dati nel modo voluto, ma è una cosa impressionate e di eleganza pari a zero.

Qualcuno di Voi ha qualche idea su come risolvere il problema.

Grazie per la collaborazione.
 

piero60

Utente Attivo
26 Gen 2015
71
2
8
Ciao Nicola,
grazie per la risposta, avevo già risolto ma non avevo il tempo di materiale di spiegare qui nel forum come.

Ho dato una occhiata alla documentazione PHP ed esistono delle istruzioni atte a risolvere queste problematiche,
per la precisione sono:
UNION ed UNION ALL

Basta semplicemente fare una query come quella sotto riportata per avere l'ordinamento dei dati desiderato:

$sql="SELECT attiva_evento, data_fine, titolo_evento, vai_a FROM evento1
UNION
SELECT attiva_evento, data_fine, titolo_evento, vai_a FROM evento2
UNION
SELECT attiva_evento, data_fine, titolo_evento, vai_a FROM evento3
UNION
SELECT attiva_evento, data_fine, titolo_evento, vai_a FROM evento4
UNION
ecc.ecc.ecc

ORDER BY data_fine ASC";

$result=mysql_query($sql);
while($rows=mysql_fetch_array($result)){

$vai_a = $rows['vai_a'];

e tutto il resto che serve quindi, ecc.ecc.

Funziona perfettamente.