Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

obter dados de várias tabelas no MySQL com diferentes condições de onde


Você precisa colocar a verificação do usuário na junção, não na condição where, assim:
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 

A razão para fazer isso é que JOINS usa a "junção esquerda" (que é implicitamente uma junção externa". condição não funcionar, ele retornará todos os dados das tabelas mencionadas anteriormente, mas para a tabela mencionada na linha, retornará NULLS para todas essas colunas.

Peço desculpas por essa descrição, pois é difícil colocar em palavras exatamente como uma junção externa (ou esquerda) complexa funciona sem ser prolixo.