Newsgroup: it.comp.www.php
Titolo: Inner join con ordine su un campo uguale per entrambe le tabelle

Salve a tutti
Dovrei fare una query che mi permetta di selezionare delle notizie da
un db in ordine cronologico. Il problema è che vi è una
differenziazione tra le varie news e quindi trovandosi in tabelle
differenti non riesco a capire come ordinarle.
Tutte e tre le tabelle hanno un campo data e su questo si dovrebbe fare
l'ordinamento.
Quello che dovrei fare è:
select a.articolo, n.news, s.stampa  from articoli as a inner join news
as n inner join stampa as s order by ??????
Se metto data giustamente mi dice che è un campo ambiguo, ma come
posso fare?
Tnx :)

Vincio ha scritto:

Questo è un problema di SQL non di PHP.
Comunque come nella proiezione hai indicato a.articolo, n.news, s.stampa 
con la notazione puntata per ovviare alle ambiguità (possibilità di più 
di un campo con lo stesso nome in due o più tabelle visibili alla 
query), utilizza la notazione puntata anche nelle where, order by, group 
by, having e così via quando richiesto (ergo, per esempio, n.data).
YW
LP

 LP
Il discorso è che io voglio ordinare in base alla data di tutti.
Se c'è un articolo con data 1, una news con data 2 ed una stampa con
data 3, voglio che questi vengano fuori in questo ordine.

Vincio ha scritto:

E le date di news, articolo e stampa sono sempre tutte e tre presenti?
Allora quello che devi fare non è una join, ma una union.
ad esempio
select data, articolo, news, stampa, tipo from
(select data, articolo, null as news, null as stampa from articoli
union
select data, null as articolo, news, null as stampa from news
union
select data, null as articolo, null as news, stampa from stampa
) t
order by data
Altrimenti devi studiare meglio lo schema del DB.
LP
PS: a prescindere da quello che MySQL ti permette di fare (che a volte 
si tratta di vere schifezze) le join dovrebbero avere una clausa ON o 
USING per indicare le regole di unione (es: select a.acampo1, b.bcampo2, 
a.acampo3 from a join b on (a.acampo1=b.bcampo3) ).
Altrimenti quello che fai è un semplice prodotto cartesiano tra le 
tabelle che si esprime indicando
Select .... from articoli a, news n, stampa s

 order by data
Questa query, pur adattata ai miei campi non funziona...ma sarà 
qualche problema strano.
Ho provato a fare una semplice unione come questa:
(select id_articoli, NULL as id_news, data from articoli)
union
(select NULL as id_articoli, id_news, data from news)
order by data desc limit 0,10
e questa query già mi dà risultati che non so spiegare
id_articoli 	id_news 	data
NULL 	1962 	2007-01-27 09:58:04
NULL 	1961 	2007-01-27 09:56:40
NULL 	1960 	2007-01-27 09:55:49
NULL 	1959 	2007-01-27 09:53:40
NULL 	1958 	2007-01-27 09:05:26
  	0 	      2007-01-27 08:46:42
  	0 	      2007-01-27 07:54:58
NULL 	1957 	2007-01-27 06:38:59
NULL 	1956 	2007-01-26 21:19:45
NULL 	1955 	2007-01-26 21:17:26
Quando trova un articolo che si trova in quel range di data mi mette 
id 0 e in id_news non mette nulla :|
Da cosa può dipendere questo problema?
Tnx

Il problema evidentemente dipende dagli id che vengono usati come 
chiave primaria...boh
Comunque ho risolto prendendo titolo e corpo che erano ciò che 
effettivamente mi servivano.
Grazie per l'aiuto :)