Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, acho que minha mente travou agora, vamos lá:
EXEMPLO 1
tbl_aluno
id,nome
1 - Joao
2 - Maria
tbl_disciplina
id,nome
1 - matematica
2 - portugues
3 - Biologia
Eu estou armazenando na tabela tbl_agenda id_aluno,id_disc1,id_disc2, OU SEJA
tbl_agenda
id_agenda, id_aluno, id_disc1, id_disc2
1 - 1 - 1 - 2
2 - 2 - 1 - 3
Dessa forma como eu faria para obter o nome do aluno e o nome das disciplinas em um SELECT usando mysqli ? É possível sem ter que fazer 2 selects ?
>
tbl_v_agenda
1 - Joao matematica Portugues
2 - Maria matematica Biologia
EXEMPLO 2
tbl_aluno
id,nome
1 - Joao
2 - Maria
tbl_disciplina
id,nome
1 - matematica
2 - portugues
3 - Biologia
tbl_agenda
id,agenda,id_aluno, id_disc
1- 1 - 1
2- 1 - 2
3- 2 - 1
4- 2 - 3
Dessa forma como eu faria para obter o nome do aluno e o nome das disciplinas em um SELECT usando mysqli que me retornasse assim? isso é possível ? agrupando as disciplinas pelo aluno ?
>
tbl_v_agenda
1 Joao matematica Portugues
2 Maria matematica Biologia
Muito obrigado galera.
Valeu Roberto, agora vamos as considerações finais.
Essa query que vc postou é para o exemplo 1 ou 2 ?
Quero dizer tb, que no caso do exemplo 1 , id_disc2 pode ser 0, pois as vezes o aluno marcara apenas 1 prova.
Ou seja, ele poderá marcar ATÉ 2 provas por mês.
Obrigado.
A unica estrutura correta é a do segundo exemplo
A estrutura do primeiro exemplo esta errada...
Ok, vou fazer uns tetes amanha e volto aqui para finalizar. Obrigado.
Roberto, o select que vc passou me retorna algo do tipo :
>
Joao matematica
Joao portugues
Agora, minha REAL dúvida era se de alguma forma eu pudesse RETORNAR:
João Matemática Portugues
Ou seja, o aluno e as disciplinas que ele escolheu ( sabendo q ele poderá escolher apenas uma ).
Isso é possível diretamente via SQL ou eu teria que fazer isso via aplicação ?
Obrigado.
Via SQL realmente não conheço nada que faça isso, no meu ver teria que fazer via aplicação mesmo...
Tente group_concat
Quero agradecer a todos vcs pela ajuda.
No final ficou assim:
Primeiro criei uma view:
selectm.id_marcacaoASid_marcacao,m.id_agendaASid_agenda,m.id_alunoASid_aluno,u.nomeASaluno,d.nomeASdisciplinafrom ((tbl_marcacoesmjointbl_usuariosu) jointbl_disciplinasd) where ((m.id_aluno=u.id_user) and (m.id_disciplina=d.id_disciplina)) order byu.nome,d.nome
na aplicação coloquei esse código.
>
if ($sql = $mysqli->prepare("SELECT id_aluno AS id, aluno AS aluno,
GROUP_CONCAT( disciplina ) AS disciplinas
FROM tbl_v_marcacoes
WHERE id_agenda = '$id_agenda'
GROUP BY id_aluno ORDER BY aluno")) {
PERGUNTA
O ideal seria inserir na VIEW o GROUP_CONCAT ou fazer na APLICAÇÃO os dois códigos JUNTOS ?
Obrigado.
Segue:
select c.nome, b.nome from tbl_agenda a
inner join tbl_disciplina b on a.id_disc = b.id
inner join tbl_aluno c on a.id_aluno = c.id
order by c.id