Newsgroup: it.comp.www.php
Titolo: [postgre] query su più tabelle

Ciao,
è tutto il pomeriggio che sto sbattendo la testa per fare una query su 
più tabelle con postgre.
Allora, ho due tabelle, libri e cd, le tabelle sono quasi uguali nel 
senso che la tabella cd ha un paio di campi in meno...
adesso avrei bisogno di fare una query tipo:
select * from libri, cd where titolo ilike '$dato%';
La variabile dato proviene da un form..
Nel migliore dei casi, mi dice che "titolo" è ambiguo:(
Ho provato anche ad utilizzare dei campi al posto di "*" con:
select libri.titolo, cd.titolo from libri, cd where libri.titolo ilike 
'c%'or cd.titolo ilike 'c%';
ma in questo caso, funziona male su cd, mi matcha un titolo che inizia 
con "k":((
Mi aiutate?
Ciao.
 
-- 
***  Per E-mail rimuovi ModE dall'indirizzo  ***
  *** Linux user # 198661 --- ICQ 33500725 ***
*** homepage 
http://web.tiscalinet.it/kailed
 ***
            *** Powered by Linux ***

Mi aiutate?
Non e' molto chiaro cosa vuoi fare.
Bonf

 Ho provato anche ad utilizzare dei campi al posto di "*" con:
Se ho ben capito cosa vorresti fare, dovresti fare la ricerca
su una tabella alla volta (rischi di fare delle "join"),
e poi eventualmente visualizzarli su un unico output,
oppure, e mi sembra piů pulito, metti un controllo
<select> nel form cosě che l'utente scelga dove possa
cercare: su cd, su libri, ecc.
Bye
	gpb
-- 
http://gpbizzaro.supereva.it/index.html

bonf wrote:

Allora un piccolo motore di ricerca, nel form ci sono due select, nel 
primo si sceglie dove cercare (libri, cd o entrambi..) nel secondo i 
campi in cui cercare (titolo, autore, editore o tutti). Poi c'è un 
campo text in cui viene inserito il dato da cercare.
Ora ho dei problemi se decido di cercare sia nei libri sia nei cd,
dove la query dovrebbe essere qualcosa tipo:
select * from libri, cd where titolo (oppure autore, editore o tutti) 
ilike '$dato';
Sul result poi opererei con pg_fetch_array..
Ciao e grazie.


 cercare: su cd, su libri, ecc.
Si ma dovrei fare una ricerca anche su tutte le tabelle, che in futuro, 
potrebbero anche aumentare. Praticamente nella select ho: cd, libri e 
tutte.


La variabile dato proviene da un form..
SELECT titolo FROM libri WHERE titolo ILIKE '$dato%'
UNION
SELECT titolo FROM cd WHERE titolo ILIKE '$dato%'
Tieni presente che probabilmente faresti prima a creare UNA SOLA
tabella, con una colonna in piu' ("supporto"):
titolo		supporto	autore		lunghezza
C Algorhythms	libro		Schildt		273pp
Hymn of Fire	CD		Sliabh na mBan	74min
Best of Eireann	nastro		Isle Folk	60min
Ghostbusters	VHS		Zemeckis	1h 45min
...gia' cosi' ti si semplifica la query assa' ;-)
Leonardo

Sul result poi opererei con pg_fetch_array..
Se l'utente sceglie entrambi,devi fare 2 select distinte
sulle 2 tabelle cd e libri. 
Con "select ... from libri, cd" otterresti un join tra le 2 tabelle
ed una esplosione di righe senza senso.
Bonf 

 tabella, con una colonna in piu' ("supporto"):
Si č vero, sarebbe piů comodo ma in generale credo anche che sarebbe 
meno flessibile, comunque ci penso.
Grazie.


bonf wrote:

La UNION suggeritami da Leonardo non mi sembra male, anche il risultato 
mi sembra "pulito"...
Ciao.


 ERROR:  Each UNION query must have the same number of columns.
 La UNION vuole, per definizione che il numero, il tipo e l'ordine dei campi
delle query riunite
tra di loro coincidano. Non è possibile, quindi, usare * se le due tabelle
cd e libri non sono perfettamente sovrapponibili.
Puoi, in ogni caso, creare dei campi fittizi vuoti per riempire le lacune ed
uniformare i dati
Giacomo

 wrote in
news:a4qh1i$485$
1...@pegasus.tiscalinet.it
: 

aggiungi nella select i campi che mancano:
select *, 'na' from table1 union select * from table2;
(a questo punto puoi crearti una vista!)
ciao

 (a questo punto puoi crearti una vista!)
Ok, grazie a tutti.
