Salve a tutti, vi espongo il mio problema (sono agli inizi e ne sto uscendo matto):
Ho tre tabelle (semplifico)
codice:
Utente
- id
- nome
Gruppo
- id
- nome
Utente_gruppo
- id_utente
- id_gruppo
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).

Tralasciando la parte di PHP (già funzionante) in cui genero le checkbox, la query che sto provando ora è la seguente:
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
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).

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!