Ajuda com Query SQL ?

Eu tenho uma tabela chamada agendas esta tabela possui uma coluna chamada turmas_id que referencia a outra tabela chamada turmas porém essa coluna turmas_id na tabela agendas eu não a defini como sendo uma foreign key pq eu adiciono zero como valor. O zero representa que o envio da agenda seja enviado para todas as turmas.

O problema eh que agora quando tento fazer o SELECT com JOIN entre essas tabelas eu consigo retornar apenas códigos validos existentes na tabela turmas e não consigo retornar todos os valores definidos como zero juntamente com os válidos.

Estou tentando assim, mas tenho um erro de syntax.

$agendamentos = $this->Agenda->query("SELECT * FROM responsavel_alunos RespAlunos " . 
                    "INNER JOIN pessoas Responsavel ON (Responsavel.id = RespAlunos.pessoas_id) " . 
                    "INNER JOIN pessoas Aluno ON (Aluno.id = RespAlunos.pessoas_id1) " . 
                    "INNER JOIN matriculas Matricula ON (Matricula.pessoas_id = Aluno.id) " . 
                    "(SELECT turmas as turma WHERE (turma.id = Matricula.turmas_id OR turma.id = 0)) AS Turma " . 
                    "INNER JOIN escolas Escola ON (Escola.id = Matricula.escolas_id) " . 
                    "INNER JOIN agendas Agenda ON (Agenda.turmas_id = Turma.id) " . 
                    "WHERE Responsavel.id = ? ORDER BY Agenda.created DESC " , array($id));

Aqui o modelo

Olá Fernando, como vai?

Percebi que você só está utilizando INNER JOIN. Tente rodar a query abaixo, utilizando o RIGHT JOIN:

    SELECT * 
       FROM responsavel_alunos RespAlunos
 INNER JOIN pessoas Responsavel   ON (Responsavel.id = RespAlunos.pessoas_id)
 INNER JOIN pessoas Aluno         ON (Aluno.id = RespAlunos.pessoas_id1)
 INNER JOIN matriculas Matricula  ON (Matricula.pessoas_id = Aluno.id)
 INNER JOIN escolas Escola        ON (Escola.id = Matricula.escolas_id)

 RIGHT JOIN turmas turma       ON (turma.id = Matricula.turmas_id)
 RIGHT JOIN agendas Agenda        ON (Agenda.turmas_id = turma.id)

 WHERE Responsavel.id = ?
 ORDER BY Agenda.created DESC

Abs!

1 curtida