Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jonas_metal

[Resolvido] problema consulta!

Recommended Posts

Bom tenho esse bd, quero juntar os seguintes dados, o nome do aluno(tabela aluno) , a data e a presença(tabela chamada) onde o id da turma seje =1 por ex. POrém não consigo juntar todos estes dados. Nos meus selects aparecem 20 resultados enquanto era para aparecer 5.

 

Não manjo muito de sql...

 

Fiz vários selects mas não da mtoo certo...

 

se eu fizer um select ch.data, ch.presenca from chamada ch where ch.id_turma=1 retorna legal a tabela chamada, porém quero colocar mais o nome do aluno nesta consulta ... mas não vai....

 

SELECT ch.data, ch.presenca,al.nome from chamada ch, aluno al where ch.id_turma=1 esse por exemplo retorna 20 resultados... e não são 20

 

sério travei aqui!!

 

por favor ajudem!!

 

obrigado!!!!

 

segue o codigo da bd.

 

--
-- Estrutura da tabela `aluno`
--

CREATE TABLE IF NOT EXISTS `aluno` (
  `id` int(8) NOT NULL auto_increment,
  `nome` varchar(50) default NULL,
  `matricula` int(10) default NULL,
  `id_turma` int(8) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6;

--
-- Extraindo dados da tabela `aluno`
--

INSERT INTO `aluno` (`id`, `nome`, `matricula`, `id_turma`) VALUES
(1, 'Abel Mendez', 5357, 1),
(2, 'Fernando da Silva', 4956, 1),
(3, 'Thomaz Alberto Cabral', 5956, 2),
(4, 'Brandão Silvera de Silva', 5353, 1),
(5, 'João Alberto', 5153, 1);

-- --------------------------------------------------------

--
-- Estrutura da tabela `chamada`
--

CREATE TABLE IF NOT EXISTS `chamada` (
  `id_aluno` int(8) default NULL,
  `id_turma` int(8) default NULL,
  `data` date default NULL,
  `presenca` char(1) NOT NULL,
  UNIQUE KEY `id_aluno` (`id_aluno`,`id_turma`,`data`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Extraindo dados da tabela `chamada`
--

INSERT INTO `chamada` (`id_aluno`, `id_turma`, `data`, `presenca`) VALUES
(1, 1, '2009-01-23', 'C'),
(1, 1, '2009-01-22', 'F'),
(3, 2, '2009-01-21', 'C'),
(3, 2, '2009-01-22', 'C'),
(5, 1, '2009-01-22', 'F'),
(2, 1, '2009-01-22', 'C');

-- --------------------------------------------------------

--
-- Estrutura da tabela `turma`
--

CREATE TABLE IF NOT EXISTS `turma` (
  `id` int(8) NOT NULL default '0',
  `nome_turma` varchar(50) default NULL,
  `status` int(1) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Extraindo dados da tabela `turma`
--

INSERT INTO `turma` (`id`, `nome_turma`, `status`) VALUES
(1, 'Turma 9', 1),
(2, 'Turma 10', 1);

Compartilhar este post


Link para o post
Compartilhar em outros sites

mostre os 20 resultados devolvidos

 

acho que o certo seria usar o inner join e ai sim retornaria o correto esperado por voce

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok... vou tenta monta um join...

 

caso de certo posto aki de novo =D

 

obrigado!!

 

abaixo segue os resultados pela consulta

 

 

SELECT ch.data, ch.presenca,al.nome from chamada ch, aluno al where ch.id_turma=1

 

data presenca nome

2009-01-23 C Abel Mendez

2009-01-23 C Fernando da Silva

2009-01-23 C Thomaz Alberto Cabral

2009-01-23 C Brandão Silvera de Silva

2009-01-23 C João Alberto

2009-01-22 F Abel Mendez

2009-01-22 F Fernando da Silva

2009-01-22 F Thomaz Alberto Cabral

2009-01-22 F Brandão Silvera de Silva

2009-01-22 F João Alberto

2009-01-22 F Abel Mendez

2009-01-22 F Fernando da Silva

2009-01-22 F Thomaz Alberto Cabral

2009-01-22 F Brandão Silvera de Silva

2009-01-22 F João Alberto

2009-01-22 C Abel Mendez

2009-01-22 C Fernando da Silva

2009-01-22 C Thomaz Alberto Cabral

2009-01-22 C Brandão Silvera de Silva

2009-01-22 C João Alberto

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT ch.data,ch.presenca FROM chamada ch

INNER JOIN aluno ON aluno.id_turma=1

where ch.id_turma=1

 

aiaia

 

não da certo.... meus conhecimentos assim não são profundo em sql....

onde estou errando....????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para ter o mesmo resultado da sua select sem joins, acho que assim funcionaria:

 

SELECT ch.data, ch.presenca,al.nome 
from chamada ch
INNER JOIN turma t on (t.id_turma = ch.id_turma)
LEFT INNER JOIN aluno al  on (al.id_turma = t.id_turma)
where ch.id_turma=1

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Puxa ainda não deu certo... essa sql acima não funcionou...

SELECT ch.data, ch.presenca,al.nome
from chamada ch
INNER JOIN turma t on (t.id = ch.id_turma)
LEFT INNER JOIN aluno al  on (al.id_turma = t.id)   	aki deu erro... segundo o phpmyadmin...
where ch.id_turma=1
mudei um pouco na esperança mas ainda não deu certo... ainda apareceu os 20 resultados.

 

SELECT ch.data, ch.presenca,al.nome
from chamada ch
INNER JOIN aluno al on (al.id_turma = 1)
where ch.id_turma=1

ouu

SELECT ch.data, ch.presenca,al.nome
from chamada ch ,aluno al where al.id_turma=1 and ch.id_turma=1
tipo ele repete duas vezes os resultados encontrados!! Alguem sabe pq!? vlwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah... já entendi na verdade

 

select al.nome, ch.data, ch.presenca from aluno al left join chamada ch on al.id = ch.id_aluno where ch.id_turma=1

 

prontoo essa consulta me retorna oq eu quero!!!!! \o/

 

tava montando errado...

 

vlwwwww

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.