Mysql
 sql >> Database >  >> RDS >> Mysql

ottenere dati da più tabelle in MySQL con diverse condizioni dove

È necessario inserire il controllo utente nel join, non nella condizione dove in questo modo:

SELECT c.course_id,l.topic,l.id,l.vid_duration,p.* 
FROM courses c 
LEFT JOIN lessons l ON l.course_id=c.course_id  
LEFT JOIN progress p ON l.id = p.lesson_id and p.user_id = :userid
WHERE c.slug = :course 

Il motivo per fare ciò è che JOINS usa il "join sinistro" (che è implicitamente un join esterno". Questo tipo di join significa che se la condizione funziona, restituisce tutti i dati della colonna per quella tabella per quella riga.. se l'intero condizione non funziona, restituirà tutti i dati per le tabelle menzionate in precedenza, ma per la tabella menzionata nella riga, restituirà NULLS per tutte quelle colonne.

Mi scuso per la descrizione, poiché è difficile esprimere a parole esattamente come funziona un join esterno (o sinistro) complesso senza essere prolisso.