Visualizzazione dei risultati da 1 a 6 su 6

Discussione: query inner join

  1. #1

    query inner join

    Salve io ho 4 tabelle
    associato con id,nome,cognome etc...
    condivisione con id, id_associato, testo
    commenti con id, id_condivisione, id_associato, testo
    notifiche con id, id_associato,id_condivisione

    vorrei realizzare una query che mostri tutte le condivisioni di un associato oppure a cui ha inserito un commento oppure dove ha effettuato una notifica.
    come posso farla? sto provando da tanto ma non mi riesce.
    grazie!

  2. #2
    Vediamo:

    ogni condivisione DEVE avere un associato altrimenti non avrebbe senso di esistere
    ma la condivisione potrebbe avere oppure non avere commenti e notifiche.

    Se cosi' fosse potresti risolvere con una inner join e due left join ed il where

    Proviamo:

    codice:
    select *
    from condivisione
    inner join associato on condivisione.id_associato = associato.id
    left join commenti on commenti.id_condivisione = condivisione.id
    left join notifiche on notifiche.id_condivisione = condivisione.id
    where condivisione.id_associato = 1234

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    l'idea è buona ma la query dovrebbe mostrare anche le condivisioni dove un associato ha inserito solo un commento o una notifica.
    E' qui che mi blocco

  4. #4
    Originariamente inviato da fiorentinese
    l'idea è buona ma la query dovrebbe mostrare anche le condivisioni dove un associato ha inserito solo un commento o una notifica.
    E' qui che mi blocco
    scambia le posizioni nella query tra condivisione ed associati

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    scambia le posizioni nella query tra condivisione ed associati non funziona
    STO PROVANDO QUESTA SOLUZIONE anche senza inserire i la tabella associato

    select DISTINCT condivisione.id,condivisione.id_associato
    from condivisione

    left join condivisione_commenti on condivisione_commenti.id_condivisione = condivisione.id AND condivisione.id_associato = '1185'
    left join condivisione_notifiche on condivisione_notifiche.id_condivisione = condivisione.id AND condivisione.id_associato = '1185'
    WHERE condivisione.id_associato = '1185'

    il problema è sempre lo stesso. con questo modo la query vuole sempre che id_associato sia presente mentre condivisione.id_associato = '1185' nella tabella condivisione potrebbe non esserci ma potrebbe esserci solo nelle altre due.


  6. #6
    SELECT * FROM condivisione, condivisione_commenti, condivisione_notifiche WHERE (condivisione.id_associato = '1185') OR ( condivisione_commenti.id_condivisione = condivisione.id AND condivisione_commenti.id_associato = '1185' ) OR ( condivisione_notifiche.id_condivisione = condivisione.id AND condivisione_notifiche.id_associato = '1185' ) GROUP BY condivisione.id ORDER BY condivisione.data DESC LIMIT 0,9

    ciao
    ho utilizzato questo tipo di soluzione ma sicuramente quando i dati saranno tantissimi si inizierà a rallentare tantissimo.
    coem posso utilizzare un altro sistema con le join??
    grazie

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.