Salve atutti,
Spero di riuscire a spiegarmi bene non è facile.
Ho tre tabelline: oggetti, oggetti_permessi,oggetti_preference.
oggetti ha: id,id_user,title.
oggetti_permessi:id_oggetto,id_user,permesso.
oggetti_preference:id_oggetto,id_user,preferenza.
Il mio problema è non riuscire ad estrarre i dati in maniera distinta.
Basterebbe fare una INNER JOIN ma il fatto è che non sempre ci sono i dati nella tabella "oggetti_preferenze" o "oggetti_permessi" riguardo l'oggetto nella tabellina "oggetti".
La query è complessa per farvi capire meglio sto selezionando tutti gli oggetti che appartengono all utente di sessione e anche quelli con determinati permessi, ma non è detto che siano dell utente di sessione e se non sono dell utente di sessione sicuramente hanno un permesso speciale nella tabellina permessi ma non è detto che abbiano la preferenza.
Ho pensato a una LEFT OUTER JOIN e ho scritto così:
SELECT DISTINCT
oggetti.id,
oggetti.title,
oggetti_permessi.id_user,
oggetti_preference.preferenza
FROM oggetti
LEFT OUTER JOIN oggetti_permessi ON oggetti.id = oggetti_permessi.id_oggetto
LEFT OUTER JOIN oggetti_preference ON oggetti.id = oggetti_preference.id_oggetto
WHERE
(oggetti_preference.preferenza='0' OR ISNULL(oggetti_preference.preferenza))
AND (
(oggetti_permessi.permesso = '2' )
OR
(oggetti.id_user = 'utente_di_sessione' )
OR
(oggetti_permessi.permesso = '1')
)
ORDER BY oggetti_preference.preferenza ASC
Spero di essere stato abbastanza chiaro da farvi capire