Ir ao conteúdo
  • Cadastre-se

Criar lista de jogos cadastrados


Posts recomendados

Seguinte, estou fazendo um sistema que me permita criar campeonatos, times, jogadores e afins. Ainda estou na fase inicial, mas encontrei uma dificuldade imensa no momento de listar os jogos cadastrados de uma competição. Estou usando PHP e MySQL para fazer isso.

 

Em linhas gerais eu tenho uma tabela para jogos, que pega o id do campeonato e dos times para gerar o jogo que aparecerá na lista.

 

Quando eu dou um select com os devidos joins no MySQL não consigo fazer com que apareça apenas o jogo indicado. Exemplo abaixo

select j.dia, t.ano, c.nome, times.nome from jogos j join torneios t on t.idcamp = j.idcampe 
join campeonatos c on j.idcampe = c.id join times on times.id = j.idtime1 or times.id = j.idtime2
where t.ano='2017' and c.id='1' and j.idtime1='4' and j.idtime2='3' and c.id='1';

Esse código acima está gerando um resultado de oito linhas, quando eu esperava no máximo duas linhas, para exibir os nomes dos times do jogo.

 

Como eu posso fazer o select para que ele mostre apenas o jogo indicado?

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@brunoalves22 Olá,  seja bem vindo em nosso Clube do Hardware.

 

Creio que jeito que está fazendo possa estar errado, para o tipo de coisa que está tentando fazer.

Vamos lá.

 

As entidades que temos aqui são:

Jogadores, Times, campeonatos e jogos.

 

Para que tudo dê certo, suas tabelas precisam ser do tipo InnoDB para que possa fazer os relacionamentos das tabelas.

 

As tabelas que controlarão os relacionamentos precisam ter um índice de cada campo relacionado a chave estrangeira.

 

No momento só posso pensar neste modelo ER

 6wqHkA6.png

 

Jogadores

  • ID auto increment Integer 11 Chave primária
  • nome varchar 50
  • idade integer 2
  • posicao varchar 30

Times

  • ID auto increment Integer 11 Chave primária
  • nome varchar 50
  • jogadores integer 11 Chave estrangeira

Campeonatos

  • ID auto increment Integer 11 Chave primária
  • nome varchar 50

Jogos

  • ID auto increment 11 Chave primária
  • Casa integer 11 chave estrangeira
  • Visitante integer 11 chave estrangeira
  • Data datetime
  • campeonato integer 11 chave estrangeira

 

Esta tabela Jogos é uma tabela N:N entre times e campeonatos.

 

Cada registro na tabela Jogos é um jogo de um campeonato. Então ele é quem vai comandar nossa consulta.

 

Agora que temos a tabela feita com seus relacionamentos a consulta ficaria da seguinte forma:

SELECT Jogadores.nome, 
           Jogadores.posicao, 
           Times.nome, 
           Jogos.Data, 
           Campeonatos.nome 
FROM Jogos
INNER JOIN Jogadores ON Jogadores.id = Times.jogadores
INNER JOIN Times ON Times.id = Jogos.Casa
INNER JOIN Times ON Times.id = Jogos.Visitante
INNER JOIN Campeonatos ON Campeonatos.id = Jogos.Campeonato
WHERE Jogos.Casa = 4 AND Jogos.Visitante = 3

Traria os dados equivalentes ao jogo entre a casa de id 4 e o visitante de id 3

 

Seria mais ou menos isso.  Claro que não vou dar certeza de que realmente está correto, pois fiz de cabeça aqui, sem fazer testes. Mas serve de base para você implementar o seu próprio.

 

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...