Ciao a tutti, spero che riuscirete ad aiutarmi nella scrittura di una query che mi sta facendo penare
Allora:
- Ho una tabella articoli. C'è il campo/chiave-primaria "idArticolo" e altri campi di secondaria importanza (tipo data inserimento ecc.).
- Nella seconda tabella (titoli) ho i titoli dei relativi articoli. C'è di nuovo la colonna idArticolo, per legare la prima alla seconda, il titolo vero e proprio, e la lingua (infatti ogni articolo può avere più di un titolo, in lingue diverse);
- La terza tabella (testi) è praticamente identica alla seconda, solo che ovviamente ha il "testo esteso" dell'articolo.
Quello che vorrei fare è una query che mi elenchi tutti gli articoli con i relativi titoli e testi nelle vartie lingue. Ho provato con una semplice:
Codice PHP:
SELECT * FROM articoli
LEFT JOIN titoli ON articoli.idArticolo = titoli.idArticolo
LEFT JOIN testi ON titoli.idArticolo = testi.idArticolo
Solo che giustamente così mi elenca tutte le possibili combinazioni tra articolo, titolo e testo (ad esempio per un articolo in lingua italiana e inglese mi da una linea con titolo in italiano e testo in italiano, una con titolo in inglese e testo in inglese, una titolo in italiano e testo in inglese ed una con titolo in inglese e testo in italiano).
Parlando in fanta-sql quello che mi servirebbe è qualcosa del tipo:
Codice PHP:
SELECT * FROM articoli
LEFT JOIN titoli ON articoli.idArticolo = titoli.idArticolo
LEFT JOIN testi ON titoli.idArticolo = testi.idArticolo AND titoli.lingua = testi.lingua
Dato che nella clausola ON non si possono indicare più condizioni per il legame tra tabelle come posso fare?
L'unico modo che ho trovato, per ora, è:
Codice PHP:
SELECT * FROM articoli
LEFT JOIN titoli ON articoli.idArticolo = titoli.idArticoli
LEFT JOIN testi ON titoli.idArticolo = testi.idArticolo
HAVING titoli.lingua = testi.lingua
Che, se non erro, crea la tabella con tutte le combinazioni e poi le filtra, un po' come se facesse la query senza HAVING e poi facesse una SELECT dei risultati filtrando ed eliminando tutte le combinazioni promiscue. Funziona... ma ho l'impressione che a livello di prestazioni non sia il massimo...