Ir para conteúdo

POWERED BY:

Arquivado

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

Raz

Tabela de campeonato (Bracket)

Recommended Posts

Boa noite pessoal, estou tendo muitas dificuldades ao tentar criar uma tabela de campeonato (Bracket) com dados vindos do banco de dados e preciso da ajuda de vocês.

 

Possuo 3 tabelas no meu banco de dados contendo as informações que julgo necessárias para montar todo o sistema, porém não consigo pensar em como fazer a tabela de jogos.

 

Tabela contendo as informações dos times:

CREATE TABLE IF NOT EXISTS `team` (
 `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(35) NOT NULL,
 `tag` varchar(5) NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `team`
--

INSERT INTO `team` (`id`, `name`, `tag`) VALUES
(1, 'Time1', 'T1'),
(2, 'Time2', 'T2'),
(3, 'Time3', 'T3'),
(4, 'Time4', 'T4');

 

Tabela contendo as informações dos times cadastrados no campeonato:

CREATE TABLE IF NOT EXISTS `season_team` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `id_season` int(10) unsigned NOT NULL,
 `id_team` int(10) unsigned NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `season_team`
--

INSERT INTO `season_team` (`id`, `id_season`, `id_team`) VALUES
(1, 1, 1),
(2, 1, 2),
(3, 1, 3),
(4, 1, 4);

 

Tabela contendo as informações sobre os jogos:

CREATE TABLE IF NOT EXISTS `match` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `id_season` int(10) unsigned NOT NULL,
 `bracket` char(2) NOT NULL,
 `round` int(10) unsigned NOT NULL,
 `match` int(10) unsigned NOT NULL,
 `id_team1` int(10) unsigned NOT NULL,
 `id_team2` int(10) unsigned NOT NULL,
 `score_team1` int(10) unsigned NOT NULL,
 `score_team2` int(10) unsigned NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `match`
--

INSERT INTO `match` (`id`, `id_season`, `bracket`, `round`, `match`, `id_team1`, `id_team2`, `score_team1`, `score_team2`) VALUES
(1, 1, 'wb', 1, 1, 1, 4, 0, 0),
(2, 1, 'wb', 1, 2, 2, 3, 0, 0),
(3, 1, 'wb', 2, 1, 0, 0, 0, 0);

 

Até então a única coisa que consegui fazer foi uma tabela "vazia" e não tenho idéia de como faze-la a partir das informações do banco.

 

$participantes = 4;
$participante = $participantes;
$round = 0;

if($participante > 0)
{
while(($participante = (int)$participante / 2) > 0)
$round++;
}

$linhas = ($participantes * 2) - 1;
$colunas = $round;

echo '<table width="90%" align="center">';

for($coluna = 1; $coluna <= $colunas; $coluna++)
{
echo '<td><center><b>Round '.$coluna.'</b></center></td>';
}

for($linha = 0; $linha < $linhas; $linha++)
{
echo '<tr>';
for($coluna = 1; $coluna <= $colunas; $coluna++)
{
	$modulo = pow(2, $coluna);
	$shift  = ((int)$modulo / 2) - 1;
	$value  = $linha - $shift;      
	$display = $value % $modulo == 0;

	if($display)
	{
		echo '<td bgcolor="#0099CC">';
		echo 'teste';
		echo '</td>';
	}
	else
	{
		echo '<td></td>';
	}
}
echo '</tr>';
}

echo '</table>';

 

Gostaria de saber se com essas informações é possível fazer a tabela ou se tenho que mudar algo, pois todas as maneiras que tentei até agora não deram certo.

 

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta, o código da página por completo é este:

 

<?php
$sql = mysql_query("SELECT * FROM season WHERE status != 'finished'");
while($row = mysql_fetch_assoc($sql))
{
$single = $row['single_elimination'];
$double = $row['double_elimination'];
}
$participantes = $single + $double;
$participante = $participantes;
$round = 0;

if($participante > 0)
{
while(($participante = (int)$participante / 2) > 0)
$round++;
}

$linhas = ($participantes * 2) - 1;
$colunas = $round;

echo '<table width="90%" align="center">';

for($coluna = 1; $coluna <= $colunas; $coluna++)
{
echo '<td><center><b>Round '.$coluna.'</b></center></td>';
}

for($linha = 0; $linha < $linhas; $linha++)
{
echo '<tr>';
for($coluna = 1; $coluna <= $colunas; $coluna++)
{
	$modulo = pow(2, $coluna);
	$shift  = ((int)$modulo / 2) - 1;
	$value  = $linha - $shift;      
	$display = $value % $modulo == 0;

	if($display)
	{
		echo '<td bgcolor="#0099CC">';
		echo 'teste';
		echo '</td>';
	}
	else
	{
		echo '<td></td>';
	}
}
echo '</tr>';
}

echo '</table>';
?>

 

Só alterei ao postar pra facilitar o entendimento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não consegui enxergar nada de errado no seu código.

Insira a estrutura da tabela seasson(banco de dados) aqui para eu ver.

$sql = mysql_query("SELECT * FROM season WHERE status != 'finished'");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estrutura da tabela season:

CREATE TABLE IF NOT EXISTS `season` (
 `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
 `single_elimination` varchar(3) NOT NULL,
 `double_elimination` varchar(3) NOT NULL,
 `status` enum('signups','bracket','running','finished') NOT NULL,
 `submitted` datetime NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Extraindo dados da tabela `season`
--

INSERT INTO `season` (`id`, `single_elimination`, `double_elimination`, `status`, `submitted`) VALUES
(1, '4', '', 'bracket', '2011-03-07 18:38:27');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Peguei o teu codigo e rodei aqui em minha maquina. Funcionou normalmente.

 

A unica alteração que fiz foi a conexão com o banco de dados. você está fazendo a conexão com o banco de dados !??!

<?php
$con = mysql_connect('localhost', 'root', '') or die ("Erro ao se conectar com o banco");
mysql_select_db('bancoteste', $con) or die ("Erro ao selecionar o banco");

$sql = mysql_query("SELECT * FROM season WHERE status != 'finished'") or die ('Erro 1: '.mysql_error());
while($row = mysql_fetch_assoc($sql))
{
$single = $row['single_elimination'];
$double = $row['double_elimination'];
}

// ...
// restante do código

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, estou fazendo a conexão.

 

Este código funciona e inclusive gera uma tabela, porém minha dúvida é como gerar esta mesma tabela com os dados vindos do banco de dados.

 

No caso,

 

[time1]

x [time1ou2]

[time2]

x [time1,2,3ou4]

[time3]

x [time3ou4]

[time4]

 

entende?

 

Não sei se estou sendo claro. :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Postou Hoje, 19:02

Então o problema desde o início é apenas o HTML.

 

Um exemplo de como você quer que fique o resultado na tabela?

A tabela está certa, como mostrado na figura -> Clique aqui

 

Respondendo ao tópico, você vai ter que fazer uma verificação no seu banco de dados antes de inserir o nome dos times.

Por ex:

 

1ª Coluna

- você verifica a partida que esta acontecendo com base no id_team1 e id_team2 e imprime o nome dos dois.

2ª Coluna

- você verifica o placar maior em (score_team1, score_team2) -> mostra o time vencendor na segunda coluna.

 

 

Parece que a lógica que você está usando está meio sem nexo, pois como você vai montar o time no coluna 3, se você não estiver + uma linha no banco para saber o resultado do outro jogo? Tente ver na parte adm como você vai fazer. mas para montar a estrutura você vai ter que seguir o pensamento acima.

 

[] se não conseguir poste novamente.

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu entendi a lógica, mas ainda não entendi como fazê-la.

 

Poderia me dar um exemplo?

 

Obrigado mais uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu entendi a lógica, mas ainda não entendi como fazê-la.

se entendeu a lógica, então comece a fazer e apresente a sua tentativa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu quis dizer que entendi a lógica do pensamento dele, ainda não consegui chegar a uma conclusão de como criar a tabela da forma como quero (dinâmica).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Raz vou explicar novamente.

 

você vai ter uma parte administrativa para gerenciar os placares dos times(ISSO É DINAMICO), a pessoa atualiza os valores e atualiza a página.

Ate nesse ponto tudo ok.

 

Agora vamos ao banco de dados.

 

você tem 1 tabela onde tem os times cadastros que é ligado em outra tabela com a partida que está acontecendo. Nesta tabela você relaciona os times que estão se enfrentando.

 

Por exemplo:

 

Linha1:

Time1 X Time3

score_1 X score_2

 

Linha2:

Time2 X Time4

score_1 X score_2

 

Até ae tudo bem

Então na primeira coluna de sua tabela você teria apenas que colocar o nome dos times da partida.

 

Time1
X
Time3

Time2
X
Time3

 

Após o usuario atualizar os scores na parte administrativa do jogo, você vai preencher a coluna número 2 com base no maior valor de cada partida.

 

Por exemplo:

 

O resultado foi

Linha1:
Time1   X Time3
3       X 0

Linha2:
Time2   X Time4
2       X 4

 

Ok, então para preencher a segunda coluna, você apenas compara os maiores valores e imprime o nome dos respectivos times.

Que no caso seria assim

 

Time1
 x
Time3
             Time1
              x
             Time4
Time4
 x
Time2

 

Ok, até ae da para fazer normalmente, mas agora me diga. Como você vai atualizar os valores deste jogo, para exibir o ganhador?

Por isso disse para você rever sua lógica, pois desta forma está um pouco confusa.

 

Abraços e até mais, tente fazer e poste o script.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Até agora ninguém entendeu o que eu realmente preciso.

 

Minha dúvida é só em como EXIBIR a tabela.

 

Mais específico, nesta parte:

 

for($linha = 0; $linha < $linhas; $linha++)
{
       echo '<tr>';
       for($coluna = 1; $coluna <= $colunas; $coluna++)
       {
               $modulo = pow(2, $coluna);
               $shift  = ((int)$modulo / 2) - 1;
               $value  = $linha - $shift;      
               $display = $value % $modulo == 0;

               if($display)
               {
                       echo '<td bgcolor="#0099CC">';
                       echo 'teste';
                       echo '</td>';
               }
               else
               {
                       echo '<td></td>';
               }
       }
       echo '</tr>';
}

 

Como fazer aparecer na coluna 1 os jogos específicos dela, depois na 2, etc, de forma correta, como a imagem de exemplo que coloquei alguns posts acima, ja que todas as maneira que eu consegui pensar não deram certo, sendo que as vezes só mostram alguns ou quando consigo que mostre todos, não fica na forma correta (como na imagem).

 

ESSE é meu problema.

 

No mais agradeço as outras ideia e as levarei em consideração quando ou SE eu conseguir resolver isso.

 

Obrigado.

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.