le due SELECT che ho intenzione di unire, con relativi JOIN al seguito, sono tra loro equiparabili: in realtà una volta JOINATE, nei campi selezionati ho lo stesso identico tipo di dati.
Solo che la prima SELECT (con relativi JOIN) si riferisce alle tabelle con prefisso USER_ e nella seconda SELECT (con relativi join) si riferisce alle stesse tabelle senza tale prefisso.
Questo succede perchè i dati che devo pescare possono essere mischiati su più tabelle (non per caso, è voluto per evitare grandi moli di dati duplicati)
Allora io uso il campo 'in_sitecats' WHERE =1 o WHERE =0 per distinguere se devo pescare i dati in 'USER_tabella' o in 'tabella'.
In un esempio che spero serva per semplificare:
le tabelle t1 e t2 sono ciascuna il risultato di una delle 2 select con i join:
codice:
t1: id, nome, cognome, data, sesso
1 pio rossi 04 m
3 gio verdi 05 m
4 pio bianchi 98 m
8 pio blu 01 m
----------------------------------
t1 ha pescato dati da USER_cats
t2: id, nome, cognome, data, sesso
2 lea rosa 03 f
3 lea rossi 06 f
7 alia mici 02 f
----------------------------------
t2 ha pescato dati da cats
il campo 'sesso' è quello che viene dalla condizione WHERE, ovvero quello che contraddistingue e differenzia ciascuna delle due SELECT. (sarebbe 'in_sitecats' della query reale).
il campo 'nome' è quello che voglio raggruppare ('catid'): per ogni nome voglio avere un solo record che rappresenta. Però vorrei PRIMA ordinare ognuna delle due tabelle per 'data', in modo che per ogni 'catid' ci sia un solo record e sia quello più recente.
Il risultato finale, nelle intenzioni, dovrebbe essere il seguente:
(Tanto per chiarire, la query funziona (sì catid è primary key ovunque), non restituisce errori SQL e anzi restituisce una cosa che assomiglia a questo risultato di esempio.)
codice:
tx: id, nome, cognome, data, sesso
3 lea rossi 06 f
1 pio rossi 04 m
7 alia mici 02 f
8 pio blu 01 m
Io una cosa del genere riesco, più o meno, ad ottenerla... i campi sono dove dovrebbero essere, e i tipi di dati sono ognuno nel proprio campo.
IL PROBLEMA E' che, nel raggruppare, invece di prendere il record più recente, prende quello che sembra essere un record a caso!!!
Per cui ottengo
codice:
tx: id, nome, cognome, data, sesso
3 gio verdi 05 m
4 pio bianchi 98 m
2 lea rosa 03 f
7 alia mici 02 f
Se non faccio GROUP BY ma solo ORDER BY nome, data ottengo il risultato voluto ma ovviamente ho un sacco di record in più (tutti quelli con lo stesso nome e data + vecchia) che non mi servono.
Non posso fare LIMIT perchè non so a priori quanti 'nome' contiene la tabella col risultato finale.
Spero di essere riuscito a spiegarmi in modo più o meno chiaro....