Salve a tutti, vi espongo il mio problema (sono agli inizi e ne sto uscendo matto):
Ho tre tabelle (semplifico)
Ora, ogni gruppo può essere associato ad ogni utente e ogni utente può avere associati più gruppi. E fin quì tutto bene! Il problema si presenta quando devo creare un sistema di ricerca dinamico per visualizzare tutti gli utenti con dei gruppi associati, MENO i gruppi selezionati dal form di ricerca (una semplice lista di checkbox generata dinamicamente contenente come value l'id di ogni gruppo da escludere nella ricerca).codice:Utente - id - nome Gruppo - id - nome Utente_gruppo - id_utente - id_gruppo
Tralasciando la parte di PHP (già funzionante) in cui genero le checkbox, la query che sto provando ora è la seguente:
La query sembra funzionare (funziona solo se ogni utente ha un solo gruppo associato), il problema è che se ci sono utenti con anche altri gruppi associati OLTRE a quello escluso nella ricerca, mi compare ugualmente nei risultati (e non è quello che vorrei).codice:SELECT DISTINCT(u.id), u.nome FROM Utente u JOIN Utente_Gruppo ug ON ug.id_utente = u.id JOIN Gruppo g ON g.id = cg.gruppo_id WHERE g.id NOT IN (1, 2, 3, etc {lista dei gruppi id generata dinamicamente in base alla ricerca selezionata}) ORDER BY u.nome
In questo caso per farlo scomparire dai risultati, devo selezionare TUTTI i gruppi a cui è associato, mentre io vorrei che ne bastasse anche uno solo selezionato per escluderlo (anche perchè attualmente ho circa 500 utenti e un totale di circa 30 gruppi, dove ogni utente ha una media di 10 gruppi associati…impensabile selezionarli tutti ogni volta).
Per dirla a parole: "Nascondi tutti gli utenti che hanno il/i seguente/i gruppo/i associato/i, a prescindere con quali altri è in relazione: {lista gruppo/i da escludere}"
Spero di essermi spiegato chiaramente...Vi ringrazio anticipatamente per le dritte, ma da solo non ci arrivo e ci sto perdendo la ragione!![]()
![]()

Rispondi quotando
Mi sento molto ignorante..Cos'è una tabella temporanea? E' strettamente necessaria (lo chiedo per ignoranza) o si può, nel caso, risolvere anche con strumenti base (altre join o subquery etc. )? 