Newsgroup: it.comp.os.linux.development
Titolo: Postgresql e query su tabelle

salve a tutti,
spero di non essere OT .... ho un database con varie tabelle collegate
attraverso vari campi/codici .... ho un problema con l'estrazione di alcuni
dati ...  c'e' una tabella del tipo
table rim
codrim integer
nome varchar(50)
in un'altra tabella ho
table prest
rim1 integer
rim2 integer
rim3 integer
rim4 integer
rim5 integer
ora i 5 campi della tabella prest possono essere vuoti o possono avere un int
che e' il riferimento al codrim della prima tabella ... per estrarre tutti i
dati dalla tabella prest ed ottenere i nomi dei rim che compaiono nei campi
rim1, rim2 ecc  (questa e' solo una parte della query) :
select rim.nome,rim.nome,rim.nome,rim.nome,rim.nome where 
.....
dati_prest.codprest=prest.codprest AND
(rim.codrim=prest.rim1 OR rim.codrim=prest.rim2 OR
rim.codrim=prest.rim3 OR rim.codrim=prest.rim4 OR
rim.codrim=prest.rim5)
purtroppo viene duplicato il primo nome trovato dalla query con rim1 in tutti e
cinque i campi ... ho provato ad usare any, unique ecc. ma senza risultato ...
qualcuno mi puo' dare una mano ??
grazie anticipate ....
-- 
#include <stdio.h>
int main(void){char c[]={10,65,110,116,111,110,105,111,32,98,97,114,98,111,110,
101,32,60,104,105,110,100,101,109,105,116,64,116,105,115,99,97,108,105,110,101,
116,46,105,116,62,10,10,0}; printf("%s",c); return 0;}

 qualcuno mi puo' dare una mano ??
Sono rugginoso ma direi qualcosa del genere:
select tab1.nome where exists 
tab2.rim1 = tab1.rim or ecc...
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
	**ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
  -<! When you say "I wrote a program that crashed Windows", people just stare
     at you blankly and say "Hey, I got those with the system, *for free*" !>-
                                (By Linus Torvalds)

  tab2.rim1 = tab1.rim or ecc...
niente da fare ... sto provando di tutto .... cerchero' di essre piu' chiaro ..
TAB1
codnave		nomenave
   1             Pippo
TAB2
codrim		nomerim
   18            RimUno
   25            S.Lucia
TAB3
codprest	nave	rim1	rim2	rim3	rim4	rim5  dataprest
  187            1       18      25                            5/1/2003
  188            1       25                                   12/2/2003
ora avrei bisogno di estrarre i dati da TAB3 sostituendo ai codici della nave e
dei rim1-5 i rispettivi nomi ... tutto questo in una riga sola, che poi va a
creare un foglio excel con le varie prestazioni ...
select TAB3.codprest,TAB3.dataprest,TAB1.nomenave,TAB2.nomerim where
	TAB3.nave=TAB1.codnave AND .....
se metto un solo TAB2.nomerim e i vari OR, la select mi torna solo il primo
trovato ... se invece metto cinque TAB2.nomerim la select mi quintuplica il
primo nome trovato ... il risultato dovrebbe essere :
187       5/1/2003       Pippo      RimUno     S.Lucia
188      12/2/2003       Pippo      S.Lucia
ciao e grazie anticipate ...
P.S. 
ho provato anche con le viste, in, exists ecc. ma il problema di "base" rimane
... dovrei farlo in una sola istruzione perche' le prestazioni sono molte, e
l'interazione tra DB e Web rallenterebbe moltissimo se dovessi fare piu' select
con php ....


 dovessi fare piu' select con php ....
Fallo in due istruzioni, se i rim non sono tantissimi.
In pratica fai una
select * from tab2 {
	tabrim[
res.id
] = res.nomerim
}
select t1.nomenave, t3.* from tab1 t1, tab3 t3 where t3.nave=t1.codnave
{
	print "nave=",nomenave," rim1=",tabrim[t3.rim1]," rim2=..."
}
Spero si capisca il metacodice... :)
Bye.

   188            1       25                                   12/2/2003
...
La ruggine non e' diminuita ma provo un'altra soluzione, poi getto la spugna
:-)
select nomenave from tab1 join tab3, nomerim from tab2 join tab3 on
tab2.codrim=tab3.rim1, nomerim from tab2 join tab3 on tab2.codrim=tab3.rim2,
eccetera sino a rim5 where tab3.codnav=tab1.codnav
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
  -<! I Never Wanted To Be What They Told Me To Be
  		Fulfill My Fate Then I'll Be Free >!- Blind Guardian - Mordred's Song

  Bye.
comunque grazie anche a te ... ciao ..


 :-)
grazie per l'impegno ma ....
dtbase=# SELECT nome from navi join prest, nome from rim join prest on rim.codr
im=prest.rim1, nome from rim join prest on rim.codrim=prest.rim2 where 
prest.na
ve=navi.codnave;
ERROR:  parser: parse error at or near "," at character 33
sicuro che la sintassi sia giusta ?? comunque grazie lo stesso ...


 penso che sarebbe un lavoraccio per il server ...
Allora il mio sistema e` il piu` veloce perche` non ti costringe a
pesantissime join sul DB. Tiri fuori una tabella semplice e poi gli
"incroci" li fai da PHP.
Bye.

  Bye.
ciao ... grazie mille per l'aiuto ...


 sicuro che la sintassi sia giusta ?? comunque grazie lo stesso ...
Assolutamente no. Quella che ho scritto era solo un'idea.
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail** 
  -<! Where's the warrior in you And the spirit he got? You say - "lost" No!
		It's somewhere inside !>- Lost Horizon - Sworn In The Metal Wind

  "incroci" li fai da PHP.
funziona perfettamente ... e non sovraccarica il DB .... mi ero fissato con
l'SQL e non vedevo la soluzione piu' lineare ... KISS (non nel senso di bacio
;-))
grazie mille .... ciao ;-))
