PDA

Visualizza la versione completa : [MySQL] select su due tabelle, no JOIN


james
10-05-2007, 17:37
ho due tabelle che memorizzano dati di nautura diversi, tabella 1 fatture, tabella 2 transazioni bancarie. Sia la tabella fatture che transazioni bancarie hanno, oltre a vari dati, un campo INT che chiamo ts su cui ho memorizzati il timestamp del giorno in cui è stata fatta l'operazione o in cui è stata emessa la fattura.

Ora dovrei visualizzare una lista dei valori di tutte e due le tabelle ordinate in base al campo ts. Se faccio una JOIN ogni riga mi rappresenta sia una riga di fatture che una riga di transazioni, quindi non posso, ma in SQL non mi sembra esista un costrutto per fare qualcosa del genere.

Un esempio forse è chiarificatore:
F->FATTURE
1, 1159653600, importo, ecc, ecc
2, 1159653800, importo, ecc, ecc
3, 1159654000, importo, ecc, ecc

T->TRANSAZIONE
1, 1159653500, ecc, ecc
2, 1159653900, ecc, ecc
3, 1159653900, ecc, ecc

quindi dovrei visualizzare una lista del genere:
T->1, 1159653500, ecc, ecc
F->1, 1159653600, importo, ecc, ecc
F->2, 1159653800, importo, ecc, ecc
T->2, 1159653900, ecc, ecc
T->3, 1159653900, ecc, ecc
F->3, 1159654000, importo, ecc, ecc

C'è un modo per farlo??

james
10-05-2007, 17:40
Avevo pensato di fare 2 select e portare i risultati su due array diversi, quindi creare un terzo andando a prendere i valori, ora dal vettore fatture, ora dal vettore transazioni in base al campo ts...ma come si può fare?!

LeaderGL
10-05-2007, 22:57
In MySQL esiste la funzione UNION tra i risultati di due select A PATTO CHE gli attributi di uscita (quelli selezionati) delle due SELECT siano compatibili all'unione.

Ovvero se hai:



SELECT id, nome, cognome FROM utenti where id > 50

UNION

SELECT id, nome, cognome, indirizzo FROM utenti WHERE id < 20

l'operazione non andrà a buon fine in quanto la seconda SELECT ha un campo in più, ma ci saranno problemi anche se le due SELECT, avendo un numero di campi uguale, presentano uno o più campi di TIPO diverso (INT, VARCHAR, etc...)

Ora io non so esattamente come sono le tue tabelle e quali dati ti interessano nel dettaglio...cmq a livello di DB esiste la UNION ;)

gigioland
11-05-2007, 00:10
meglio ancora la union all, perchè la union semplice scarta i record uguali (ovviamente nelle colonne in unione)

james
11-05-2007, 10:07
le tabelle sono diverse, quindi non posso usare la union o union all...

mi sa che l'unico modo è fare due select, passare i risultati su dua array, e poi giocare con i due array per crearne un terzo con i dati ordinati come voglio, che ne dite?

gigioland
11-05-2007, 10:24
il fatto che le tabelle siano diverse non conta nulla...da quanto ho capito i risultati restituiscono lo stesso tipo di dato per cui in caso ti basta rinominare dei campi e tutto si risolve....
Altrimenti passi per gli array...

M

james
11-05-2007, 12:31
sto provando la strada del bubble sort, funziona sicuro e non impazzisco più di tanto, cmq grazie a tutti dei consigli e della partecipazione

Loading