Listar dados de tabela do meio – Mysql
Olá pessoal
O conteúdo deste post surgiu a partir de uma solicitação de um amigo meu da faculdade que me apoiou muito na empresa que trabalho, quando comecei a trabalhar. ( sabe como é.. aprendiz é fogo.. hehe )
Então nada mais justo que tentar recompensar, respondendo da melhor forma possível.
Problema
Montar uma forma otimizada de mostrar os registros de um relacionamento N para N, ou seja, trocando tudo por míudos:
Eu tenho a tabela Usuário, tenho a tabela Cursos.
Seria preciso mostrar no formulário de Usuários todos os Cursos cadastrados e os Cursos que o Usuário já se cadastrou.
Então bolei uma forma simples e otimizada usando recursos do banco de dados Mysql para mostrar isso:

Solução
# montamos a consulta aqui
$sql = "
SELECT
c.cur_id as cod_curso,
c.cur_nome as nome,
cs.usr_id as cod_usuario
FROM
curso c
LEFT JOIN curso_usuario cs ON
c.cur_id = cs.cur_id AND
cs.usr_id = '".$codigo_do_usuario."'";
# pronto, a sql está pronta, mostramos todos os registros do curso, com Left Join,
# para mostrar todos mesmo que não tenham ligação com a tabela curso_usuario
$query = mysql_query($sql); # executa o sql
while ($r = mysql_fetch_array($query)) { # lista todos os registros
$sel = (!is_null($r['cod_curso']))?"checked='checked'":""; #verifica se tem relacionamento com a tabela do meio ou não
echo sprintf('
<div><label><input type="checkbox" name="cursos[]" id="cursos[]" value="%s" %s />%s</label></div>
',
$r['cod_curso'],$sel,$r['nome']); #imprime o checkbox
}
Funciona porquê?
O segredo é o LEFT JOIN , que faz mostrar todos os registros da tabela cursos, mesmo os que não possuem ligação com a tabela do meio.
No lugar de mostrar os registros, ele mostra NULL, ou seja, sem valor, o que tratamos na linha >
$sel = (!is_null($r['cod_curso']))?"checked='checked'":"";
Bom, é isso então..
FUI =)
-
http://www.evolutiondfm.com.br DIOGO
-
http://www.evolutiondfm.com.br DIOGO
-
http://weber.eti.br Luiz F. Weber
-
http://weber.eti.br/ Luiz Felipe
-
http://www.evolutiondfm.com.br DIOGO
-
http://www.evolutiondfm.com.br DIOGO
-
http://weber.eti.br Luiz F. Weber
-
http://weber.eti.br/ Luiz Felipe
















