Ciao a tutti,
ho dei dubbi su come relazionare queste 2 tabelle

codice:
groups
+-----------+---------------------+--------+
| group_id  | name                | public |
+-----------+---------------------+--------+
dove public indica se un gruppo è accessibile da tutti (0) o è privato (1)
codice:
user_groups
+--------+-----------+-----------+--------+
| id     | group_id  | user_id   | banned |
+--------+-----------+-----------+--------+
Dovrei recuperare la lista di tutti i gruppi che sono pubblici e privati (in questo caso devo controllare se l'utente è presente nella tabella user_groups) ed escludere quando l'utente è bannato (banned = 1).


codice:
SELECT * 
FROM groups as g NATURAL LEFT OUTER JOIN user_groups as u 
WHERE (public = 1 or u.user_id = 14) and NOT EXISTS ( SELECT 1 FROM user_groups as b WHERE b.group_id = g.group_id and b.user_id = 14 and b.banned = 1) 
GROUP BY g.group_id 
ORDER BY members_count DESC 
LIMIT 0, 10
Sono riuscito a fare questa query ma ho dei dubbi sul fatto che sia la soluzione migliore.
Che ne pensate?