Visualizzazione risultati 1 fino 17 di 17

Discussione: Query per unire più tabelle [era: unire più database]

  1. #1
    L'avatar di lobster
    lobster non è connesso Utente
    Data registrazione
    05-09-2003
    Residenza
    ...nel 'Paese dei Balocchi'...
    Messaggi
    151

    Predefinito Query per unire più tabelle [era: unire più database]

    Ciao a tutti!

    Ho provato a cercare nel forum e in giro per la Rete ma non riesco a trovare nulla che mi possa aiutare!

    Avendo io 3 o più database MYSQL, come faccio ad estrarre i valori dei campi di ciascuna tabella, corrispondenti a un valore di partenza che accomuni le tabelle (ad esempio il numero ID)?

    Esempio:

    Tabella AUTORE (id, nome_autore)
    Tabella LIBRO (id, titolo_libro)
    Tabella EDITORE (id, nome_editore)

    Io devo prendere le tre tabelle e, preso ID = 1, ottenere il nome dell'autore, il titolo del libro e la case editrice che corrispondano a "1" in ciascuna tabella...
    non so se mi avete capito, ma spero tanto di si!!!

  2. #2
    Guest

    Predefinito

    Se hai tre database distinti penso che non riesci a fare quello che vuoi tu con una unica query o con le viste (se sbaglio, qualcuno mi corregga)...

    puoi usare php o altri linguaggi?
    In questo caso puoi implementare un join "casereccio" nel senso che se hai l'ID, crei una query ( contenente il valore di ID) ed estrai le info che ti servono...

  3. #3
    L'avatar di lobster
    lobster non è connesso Utente
    Data registrazione
    05-09-2003
    Residenza
    ...nel 'Paese dei Balocchi'...
    Messaggi
    151

    Predefinito

    Uso php e so unire 2 database. 3 no! :(
    Se mi spieghi con un esempio e un codice, anche semplice, tanto per chiarirmi la cosa!
    Grazie!

  4. #4
    Guest

    Predefinito

    Allora, le tabelle sono 3, ma come le hai scritte tu non sono collegate tra di loro... ammenochè i campi id non hanno un significato diverso da come li intendo io (chiavi primarie e autoincrement)...perciò ho aggiunto due campi alla tabella LIBRO:
    Tabella AUTORE (id, nome_autore) nel database A
    Tabella LIBRO (id, titolo_libro,id_autore,_id_editore) nel database B
    Tabella EDITORE (id, nome_editore) nel database C

    Per esempio hai un libro e vuoi sapere l'autore e l'editore:
    1)Interroghi il database B e salvi nella variabile $ID_autore e in $ID_editore rispettivamente l'idice dell'autore e l'indice dell'editore che ha il libro cercato.

    2)Interroghi il database A con una query del tipo:
    Select * from AUTORE where id=$ID_autore
    (fai quello che vuoi col record trovato)

    3)Interroghi il database B con una query del tipo:
    Select * from EDITORE where id=$ID_editore
    (fai quello che vuoi col record trovato)

    Spero di essere stato chiaro... altrimenti chiedi pure...

    Ciao

  5. #5
    L'avatar di lobster
    lobster non è connesso Utente
    Data registrazione
    05-09-2003
    Residenza
    ...nel 'Paese dei Balocchi'...
    Messaggi
    151

    Predefinito

    Si scusa, in effetti avevo dimenticato di mettere un campo dove prendere il valore che colleghi i campi che mi interessano! :P

    Cmq non esiste un modo per interrogare il database una sola volta ed estrarre i dati da 3 o più tabelle senza dover fare interrogazioni multiple (con più SELECT)?

    In pratica: posso usare JOIN per collegare in un colpo solo le tabelle che mi interessano? Con due tabelle riesco a fare il JOIN, con 3 o più no! :(

  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da lobster
    Si scusa, in effetti avevo dimenticato di mettere un campo dove prendere il valore che colleghi i campi che mi interessano! :P

    Cmq non esiste un modo per interrogare il database una sola volta ed estrarre i dati da 3 o più tabelle senza dover fare interrogazioni multiple (con più SELECT)?

    In pratica: posso usare JOIN per collegare in un colpo solo le tabelle che mi interessano? Con due tabelle riesco a fare il JOIN, con 3 o più no! :(
    Il problema è che le tabelle stanno su database distinti... se esiste un modo per fare il JOIN in queste condizioni, io non lo conosco.... mi dispiace...

  7. #7
    L'avatar di lobster
    lobster non è connesso Utente
    Data registrazione
    05-09-2003
    Residenza
    ...nel 'Paese dei Balocchi'...
    Messaggi
    151

    Predefinito

    Ho fatto quello che mi serviva!
    Spero solo di non avere appesantito troppo il DB!

  8. #8
    Guest

    Predefinito

    Esiste qualche funzione apposta?
    Potresti dire come hai fatto? non intendo "posta il codice", solo in via di principio...
    Ciao

  9. #9
    L'avatar di lobster
    lobster non è connesso Utente
    Data registrazione
    05-09-2003
    Residenza
    ...nel 'Paese dei Balocchi'...
    Messaggi
    151

    Predefinito

    No, ho fatto il select di una tabella, poi ancora select.
    In pratica ho fatto come hai detto tu, funziona, ma non so se esiste una JOIN di 3 o più tabelle!

    Cmq va bene cosi per adesso!!!

  10. #10
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Il join delle tre tabelle, posto che risiedano sullo stesso database, dovrebbe essere questo (seguendo la soluzione di giuseppeiemma, più "logica"):
    Codice:
    SELECT LIBRO.id, titolo_libro, nome_autore, nome_editore
    FROM LIBRO, AUTORE, EDITORE
    WHERE id_autore = AUTORE.id AND id_editore = EDITORE.id;
    Con questa query, otterrai una sola tabella in cui ciascuna riga ha id del libro, titolo, autore ed editore.

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  11. #11
    L'avatar di lobster
    lobster non è connesso Utente
    Data registrazione
    05-09-2003
    Residenza
    ...nel 'Paese dei Balocchi'...
    Messaggi
    151

    Predefinito

    Non riesco.

    Io ho queste 3 tabelle

    ARTICOLI (id, titolo, testo, autore, categoria)
    AUTORI (id, nome_autore)
    CATEGORIE (id, nome_categoria)

    Nella tabella ARTICOLI io assegno:
    autore = 1 (cioè dichiato che il nome dell'autore è all'ID 1 della tabella AUTORI)
    categoria = 5 (cioè dichiato che il nome della categoria è all'ID 5 della tabella CATEGORIE)

    Adesso qualcuno per favore provi a elaborare questi dati!
    Io ho perso 2 ore (solo oggi, senza contare ieri e i giorni passati) e non ho risolto nulla.
    Riesco a fare il lavoro che voglio solo facendo due SELECT ma non posso credere che non esiste una strada più breve per ottimizzare le risorse!!!

    Ho provato con l'esempio di «dementialsite» ma non va (probabilmente sbaglio io) e ho cercato di lavorare con INNER JOIN attraverso esempi presi in Rete, ma niente...
    Ultima modifica di lobster : 19-07-2007 alle ore 00.34.52

  12. #12
    Guest

    Predefinito

    Scusami ma non penso che puoi usare il join su tabelle appartenenti a database diversi...
    Ciao

  13. #13
    L'avatar di lobster
    lobster non è connesso Utente
    Data registrazione
    05-09-2003
    Residenza
    ...nel 'Paese dei Balocchi'...
    Messaggi
    151

    Predefinito

    Ma io ho UN database che contiene 3 tabelle.
    O dico una cavolata? Altrimenti il comando JOIN a cosa servirebbe?


    FunCool: Vista la confusione causata dal titolo, lo modifico.
    Ultima modifica di funcool : 20-07-2007 alle ore 07.06.28

  14. #14
    Guest

    Predefinito

    Citazione Originalmente inviato da lobster
    Avendo io 3 o più database MYSQL...
    Adesso dici che hai un database... vabbè...
    Comunque...
    Popola le 3 tabelle con qualche dato e dicci cosa ti viene fuori esegueno la query (specifica anche i dati inclusi nelle tabelle:

    Codice PHP:
    SELECT *
    FROM LIBRO L, AUTORE A, EDITORE E
    WHERE id_autore
    = AUTORE.id AND id_editore = EDITORE.id;
    Ciao

  15. #15
    L'avatar di lobster
    lobster non è connesso Utente
    Data registrazione
    05-09-2003
    Residenza
    ...nel 'Paese dei Balocchi'...
    Messaggi
    151

    Predefinito

    Ragazzi scusatemi!
    Ho fatto davvero un casino! Sono idiota, perdonatemi!

    Comuqne, ho sistemato il tutto e adesso funziona bene!

    Questo è il codice FUNZIONANTE che uso adesso

    Codice:
    SELECT posts.*, users.user, categories.category
    FROM posts INNER JOIN users ON posts.author = users.id
    INNER JOIN categories ON categories.id = posts.category
    ORDER BY posts.time DESC
    Adesso mi serve contare i commenti che si trovano della tabella COMMENTS e che sono collegati alla tabella POSTS dal campo COMMENTS.POST al campo POSTS.ID!

    Non riesco a capire come usare il COUNT!

    Mi aiutate?

    Scusate ancora per il pasticcio!!!

  16. #16
    Guest

    Predefinito

    Cosa vuoi sapere del COUNT?
    Non ho ben capito com'è fatta la tabella comments e posts...
    Potresti anche usare un GROUP by post.id in questo caso ti vengono raggruppati tutti i campi con lo stesso id. esempio:
    SELECT quello_che_vuoi, count(id) FROM `tua_tabella` GROUP BY pagina ORDER BY id

    Ciao

  17. #17
    L'avatar di lobster
    lobster non è connesso Utente
    Data registrazione
    05-09-2003
    Residenza
    ...nel 'Paese dei Balocchi'...
    Messaggi
    151

    Predefinito

    POSTS -> id, title, text, ...
    COMMENTS -> id, time, text, post, ...

    Io devo conteggiare quante volte COMMENTS.POST = POSTS.ID

    Spero di essere stato abbastanza chiaro! :)

    (ovviamente utilizzando il codice funzionante che ho postato prima!)
    Ultima modifica di lobster : 23-07-2007 alle ore 23.16.39

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •