Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832

    JOIN tra NUMEROSE tabelle

    ciao a todos,

    piccolo grande quesito.

    ho una tabella principale e due tabelle parallele che contengono informazioni parallele appunto e poi due tabelle che regolano le relazioni delle due tabelle parallele con la tabella principale.

    se avessi solo tre tabelle (main, parallela e relazioni) saprei fare un doppio left join, ma così..

    come si può fare?

  2. #2
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832
    allora teoricamente dovrei esserci:

    codice:
    SELECT *
    FROM (
    `tbl_immagini`
    LEFT JOIN `tbl_relazioni_tag` ON tbl_relazioni_tag.id_oggetto = id
    LEFT JOIN `tbl_relazioni_mood` ON ( tbl_relazioni_mood.id_oggetto = id )
    LEFT JOIN `tbl_tags` ON ( tbl_tags.id_chiave = tbl_relazioni_tag.id_tag )
    LEFT JOIN `tbl_mood` ON ( tbl_mood.id_mood = tbl_relazioni_mood.id_mood )
    )
    solo che visto ch due tabelle usano lo stesso nome "chiave" come faccio a creare un alias che risolva l'ambiguità?

    tnx

  3. #3
    Non capisco dove sia l'ambiguità

    Forse intendi hce il campo "chiave" è sia in tbl_relazioni_tag che in tbl_tags (per esempio)?
    Allora fai così

    SELECT ti.*, rt.*, rt.chiave as chiavert, rm.*, tt.*, tt.chiave as chiavett, tm.*
    FROM (
    `tbl_immagini` ti
    LEFT JOIN `tbl_relazioni_tag` rt ON rt.id_oggetto = ti.id
    LEFT JOIN `tbl_relazioni_mood` rm ON ( rm.id_oggetto = ti.id )
    LEFT JOIN `tbl_tags` tt ON ( tt.id_chiave = rt.id_tag )
    LEFT JOIN `tbl_mood` tm ON ( tm.id_mood = rm.id_mood )
    )


  4. #4
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832
    Originariamente inviato da Dascos
    Non capisco dove sia l'ambiguità

    Forse intendi hce il campo "chiave" è sia in tbl_relazioni_tag che in tbl_tags (per esempio)?
    Allora fai così

    SELECT ti.*, rt.*, rt.chiave as chiavert, rm.*, tt.*, tt.chiave as chiavett, tm.*
    FROM (
    `tbl_immagini` ti
    LEFT JOIN `tbl_relazioni_tag` rt ON rt.id_oggetto = ti.id
    LEFT JOIN `tbl_relazioni_mood` rm ON ( rm.id_oggetto = ti.id )
    LEFT JOIN `tbl_tags` tt ON ( tt.id_chiave = rt.id_tag )
    LEFT JOIN `tbl_mood` tm ON ( tm.id_mood = rm.id_mood )
    )

    si era quello il punto
    avevo le tabelle davanti e mi ero dimentica tdi specificare

    grazie.

  5. #5
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832
    volevo cheidere un'altra cosa se possibile.

    l'effetto del LEFT JOIN è quello di "duplicare" i record tante volte quante sono i dati corrispondenti nelle altre tabelle relazionali.
    una cosa tipo:

    tbl_relazioni - id_oggetto, id_chiave
    1, 5
    1, 6
    1,99

    se tbl_chiavi è: id_chiave, chiave
    5 - pippo
    6 - pluto
    99, paperino

    l'effetto finale sarà, mettiamo ci siano solo tre record nelal tabella principale

    id_oggetto, dati_oggetto, id_chiave, chiave

    1, dati_1, 1, pippo
    1, dati_1, 5, pluto
    1, dati_1, 99, paperino
    2, dati_2, NULL //non ho ancora dato nulla
    3, dati_3, solo_una_chiave


    come faccio a lavorare in modo organico su questi dati, raggruppando "pippo", "pluto" e "paperino" evitandomi lunghi lavori con i vettori per farlo?


  6. #6
    Cosa intendi con
    come faccio a lavorare in modo organico su questi dati, raggruppando "pippo", "pluto" e "paperino" evitandomi lunghi lavori con i vettori per farlo?
    specifica bene cosa vuoi ottenere e con quali dati di partenza

  7. #7
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832
    come dicevo, ho una tabella di immagini con i dati relativi, path, noome, titolo.
    ho due tabelle di tags, separate per motivi specifici.
    e quindi due tabelle relazionali.

    devo visualizzare tutte le immagini e relativi tag in una pagina.
    con la join a 5 tabelle ho tutto il recordset con i dati duplicati li dove ci sono più relazioni.
    il punto è che i tag dovrei visualizzarli in un campo di testo nel formato "tag1, tag2, etc," e invece con la join fatta così ho solo il record ripetuto, che così elaborato, se facessi un fetch , mi creerebbe una voce nel vettore per ogni tag...
    e invece vorrei che alla fine per ogni record "vero" della tabella immagini, vi fossero poi i due set di tag associati.

  8. #8
    Ok,capito.
    Adesso hai
    img1, tag1
    img1, tag2
    img1, tag3
    img2, tag1
    ...
    tu vorresti
    img1, tag1 tag2 tag3
    img2, tag1
    ...

    Hmmm...Nicolaaaaaaaaa...

  9. #9
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832
    Originariamente inviato da Dascos
    Ok,capito.
    Adesso hai
    img1, tag1
    img1, tag2
    img1, tag3
    img2, tag1
    ...
    tu vorresti
    img1, tag1 tag2 tag3
    img2, tag1
    ...

    Hmmm...Nicolaaaaaaaaa...
    ottima sintesi...
    ma...?

  10. #10
    Ma...me la cavo bene con le sql, ma non così bene!
    Nicola è invece uno bravo e quindi invocavo il suo aiuto!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.