Ir para conteúdo

Arquivado

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

Hussay

[Resolvido] Como criar tabelas de campeonatos divididos por rodad

Recommended Posts

Pessoal,

 

Consegui fazer somente no braço da seguinte forma:

Pequei 16 times, sendo que cada time é um número de 1 a 16.

realizei na raça fazendo todo mundo jogar com todo mundo em um turno.

1ª rodada

1 x 5

10 x 8

13 x 9

14 x 4

2 x 12

3 x 15

6 x 16

7 x 11

 

2ª rodada

16 x 2

11 x 3

13 x 5

15 x 7

9 x 1

4 x 10

6 x 12

8 x 14

 

3ª rodada

12 x 3

1 x 4

15 x 6

16 x 7

2 x 11

5 x 10

8 x 13

9 x 14

 

4ª rodada

3 x 10

11 x 4

9 x 16

12 x 5

2 x 1

7 x 14

8 x 15

6 x 13

 

5ª rodada

15 x 5

1 x 7

10 x 6

11 x 9

8 x 12

2 x 14

13 x 3

4 x 16

 

6ª rodada

10 x 11

12 x 13

14 x 16

2 x 6

3 x 9

4 x 8

15 x 1

5 x 7

 

7ª rodada

5 x 2

1 x 12

8 x 3

10 x 15

9 x 6

4 x 7

16 x 13

14 x 11

 

8ª rodada

9 x 4

6 x 3

7 x 2

5 x 8

16 x 12

15 x 11

14 x 10

13 x 1

 

9ª rodada

2 x 9

13 x 10

3 x 4

16 x 11

1 x 14

5 x 6

12 x 15

7 x 8

 

10ª rodada

14 x 5

7 x 12

13 x 2

16 x 3

15 x 4

6 x 1

8 x 11

9 x 10

 

11ª rodada

1 x 16

11 x 13

10 x 12

3 x 7

6 x 4

14 x 15

8 x 2

9 x 5

 

12ª rodada

15 x 13

11 x 1

10 x 16

7 x 9

4 x 2

3 x 5

6 x 8

12 x 14

 

13ª rodada

2 x 15

12 x 9

1 x 8

7 x 10

4 x 13

11 x 6

14 x 3

5 x 16

 

14ª rodada

10 x 2

3 x 1

5 x 11

12 x 4

7 x 13

14 x 6

16 x 8

15 x 9

 

15ª rodada

8 x 9

6 x 7

4 x 5

2 x 3

15 x 16

13 x 14

11 x 12

1 x 10

 

Depois fiz uma tabela mysql chamada times16 e fiz o upload desses jogos

CREATE TABLE IF NOT EXISTS `times16` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `time1` int(11) NOT NULL,
 `time2` int(11) NOT NULL,
 PRIMARY KEY (`id`)
)

 

Depois vou lançar no meu código php a condição de ser contado quantos times existem na tabela mysql jogadores no mês e fazer a lógica já inserida no banco de dados:

segue o código abaixo:

<?php

$mes = $_POST['mes'];
$super = $_POST['supervisor'];
/* Conte os times de acordo com o mês e o gestor*/
$times = mysql_query("SELECT * FROM jogadores WHERE mes='$mes' and supervisor='$super'");
$conta_times = mysql_num_rows($times);

if($conta_times == 16){
$busca_combinacao = mysql_query("SELECT * FROM times16");
while($linha_combinacao = mysql_fetch_array($busca_combinacao)){
	$A = $linha_combinacao['time1'];
	$B = $linha_combinacao['time2'];
	$busca_time1 = mysql_query("SELECT * FROM jogadores WHERE mes='$mes' and supervisor='$super' and numero='$A'");
	while($linha_busca_time = mysql_fetch_array($busca_time1)){
		$time1 = $linha_busca_time['nome'];
	}
	$busca_time2 = mysql_query("SELECT * FROM jogadores WHERE mes='$mes' and supervisor='$super' and numero='$B'");
	while($linha_busca_time2 = mysql_fetch_array($busca_time2)){
		$time2 = $linha_busca_time2['nome'];
	}
	$insere_jogos = mysql_query("INSERT INTO jogos (mes, pontos1, time1, placar1, placar2, time2, pontos2, supervisor) values ('$mes', '0', '$time1', '0', '0', '$time2', '0', '$super')");

	}


}

echo "<META HTTP-EQUIV=REFRESH CONTENT='0; URL=campeonato_otimizacao.php?escolha=3'>
<script type=\"text/javascript\">
alert(\"Jogos inseridos com sucesso. \");
</script>";


?>

 

Depois de inserido, agora realizo um nova página para separar direitinho por rodada:

<? 


/*Decide quantas rodadas*/
$rodadas1 = mysql_query("SELECT nome FROM jogadores WHERE mes='$mes'");
$cont_rodadas1 = mysql_num_rows($rodadas1);/*Conta jogadores*/
$rodadas = $cont_rodadas1 - 1;/*Conta rodadas*/
$jogos = mysql_query("SELECT id FROM jogos WHERE mes='$mes'");
$cont_jogos = mysql_num_rows($jogos);/*Conta quantos jogos*/
$times_por_rodada = $cont_jogos / $rodadas;/*Conta quantos times por rodada*/
$loop_rodadas = 0;
$inicio = 0;

$jogo_primeiro = mysql_query("SELECT * FROM jogos WHERE mes='$mes' LIMIT 0,1");/*Primeiro id*/
 while($linha_jogo_primeiro = mysql_fetch_array($jogo_primeiro)){
  $id_inicio = $linha_jogo_primeiro['id']; }

while($loop_rodadas < $rodadas){
$loop_rodadas++;
/*Fim Decide quantas rodadas (loop em toda tabela*/
?>
<table width="700px" border="1" cellspacing="0" cellpadding="0" align="center">
  <tr>
     <td height="32" colspan="7" valign="middle"><center><A NAME="<? echo $loop_rodadas;?>rodada" style="font-size:16px; color:#00F; text-decoration:underline "><? echo $loop_rodadas; ?>ª Rodada</a></center><span style="text-align:right"><a href="#topo" style="color:#F00; text-decoration:overline underline">Voltar ao Topo</a></span></td>
   </tr>
 <tr>
 <td width="60" align="center">Dia</td>
 <td width="223" align="center">TIME1</td>
   <td width="39" align="center"> </td>
   <td width="21" align="center">X</td>
   <td width="20" align="center"> </td>
   <td width="323" align="center">TIME2</td>
   <td width="60" align="center">Dia</td>
 </tr>
 <?

 $jogos = mysql_query("SELECT * FROM jogos WHERE mes='$mes' and id>='$id_inicio' LIMIT 0,$times_por_rodada");
 while($linha_jogos = mysql_fetch_array($jogos)){
  $time1 = $linha_jogos['time1'];
  $placar1 = $linha_jogos['placar1'];
  $placar2 = $linha_jogos['placar2'];
  $time2 = $linha_jogos['time2'];
  $id = $linha_jogos['id'];
  $dia = $linha_jogos['dia'];
  $dia2 = $linha_jogos['dia2'];
  $mes_certo = $linha_jogos['mes'];
  $busca_registro = mysql_query("SELECT * FROM adm WHERE nome LIKE '$time1%'");
  while($linha_registro = mysql_fetch_array($busca_registro)){
	  $registro1 = $linha_registro['login'];
	  }
 $confere_gols = mysql_query("SELECT COUNT(status) as contagem FROM otimizacao_completa WHERE login='$registro1' and status='ACEITOU' and dia='$dia' and mes='$mes_certo'");
 while($linha_confere = mysql_fetch_array($confere_gols)){
	 $gols_reais1 = $linha_confere['contagem'];
	 }


	 $busca_registro2 = mysql_query("SELECT * FROM adm WHERE nome LIKE '$time2%'");
  while($linha_registro2 = mysql_fetch_array($busca_registro2)){
	  $registro2 = $linha_registro2['login'];
	  }
 $confere_gols2 = mysql_query("SELECT COUNT(status) as contagem FROM otimizacao_completa WHERE login='$registro2' and status='ACEITOU' and dia='$dia2' and mes='$mes_certo'");
 while($linha_confere2 = mysql_fetch_array($confere_gols2)){
	 $gols_reais2 = $linha_confere2['contagem'];
	 }




	 $dia_atual = date('d');
 ?>
 <tr>


 <td height="28" align="center" <? if(($dia == $dia_atual) or ($dia2 == $dia_atual)){ ?> bgcolor="#CCFFCC" <? }?>><? echo $dia."/".$mes;?>
  </td>


  <td height="28" align="center" <? if($placar1 > $placar2){ ?> bgcolor="#00CCFF" <? } ?><? if($placar1 == $placar2){ ?> bgcolor="#FF9933" <? } ?>><? echo $time1;?>
</td>
   <td align="center" width="50px"> <? echo $placar1; ?></td>
   <td align="center">X</td>
   <td align="center" width="50px"><? echo $placar2; ?>
     </td>
     <td align="center" <? if($placar1 < $placar2){ ?> bgcolor="#00CCFF" <? } ?><? if($placar1 == $placar2){ ?> bgcolor="#FF9933" <? } ?>>
       <? echo $time2; ?> 
       </td>

   <td height="28" align="center" <? if(($dia == $dia_atual) or ($dia2 == $dia_atual)){ ?> bgcolor="#CCFFCC" <? }?>><? echo $dia2."/".$mes;?></td>

 </tr>
 <tr>
<td height="29" colspan="2" align="center" <? if(($dia == $dia_atual) or ($dia2 == $dia_atual)){ ?> bgcolor="#CCFFCC" <? }?>> </td>

   <td colspan="3" align="center" <? if(($dia == $dia_atual) or ($dia2 == $dia_atual)){ ?> bgcolor="#CCFFCC" <? }?>> </td>
   <td  align="center" colspan="2" <? if(($dia == $dia_atual) or ($dia2 == $dia_atual)){ ?> bgcolor="#CCFFCC" <? }?>> </td>
   </tr>
 <? } ?>
</table>
<? $id_inicio = $id_inicio + $times_por_rodada; }?>

 

Agora vou fazer outras tabelas na raça ( com 14 times até 26 times) e depois vou fazer esse mesmo procedimento, sendo que na hora de exibir os jogos o raciocínio não precisará ser mudado.

 

Espero que vocês tenham entendido a lógica!

 

Qualquer dúvida, estou a disposição no facebook:

http://www.facebook.com/hussay.diniz

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este é o tipo de problema que deixa nerds que nem eu maluco.

Vendo NFL ontem na TV uma solução me ocorreu

Vamos supor 4 times para simplificar A B C D

 

Monta-se uma matriz

    
    A	 B   C	 D 	
---+---+---+---+---+
A  |   |   |   |   | 
---+---+---+---+---+
B  |   |   |   |   |			  
---+---+---+---+---+ 
C  |   |   |   |   | 
---+---+---+---+---+
D  |   |   |   |   |

 

Elimina-se o auto confronto

 

     
   A	 B   C	 D 	
---+---+---+---+---+
A  | - |   |   |   | 
---+---+---+---+---+
B  |   | - |   |   |			  
---+---+---+---+---+ 
C  |   |   | - |   | 
---+---+---+---+---+
D  |   |   |   | - |

 

Escolhe um time de forma alatoria, D por exemplo e o adversário A por exemplo,

estes recebem as rodados 1 e 4 pois temos (n-1)*2 de rodadas


    A	 B   C	 D 	
---+---+---+---+---+
A  | - |   |   | 4 | 
---+---+---+---+---+
B  |   | - |   |   |			  
---+---+---+---+---+ 
C  |   |   | - |   | 
---+---+---+---+---+
D  | 1 |   |   | - |

 

Sobra na 1 e 4 rodados B e C , mas com mais times o passo acima seria recursivo, entre B e C, escolhemos D como 1º

mandante

 

    A	 B   C	 D 	
---+---+---+---+---+
A  | - |   |   | 4 | 
---+---+---+---+---+
B  |   | - | 1 |   |			  
---+---+---+---+---+ 
C  |   | 4 | - |   | 
---+---+---+---+---+
D  | 1 |   |   | - |

Os passos seriam repetidos e teriamos algo como

 

     
    A	 B   C	 D 	
---+---+---+---+---+
A  | - | 3 | 2 | 4 | 
---+---+---+---+---+
B  | 6 | - | 1 | 2 |			  
---+---+---+---+---+ 
C  | 5 | 4 | - | 6 | 
---+---+---+---+---+
D  | 1 | 5 | 6 | - |

Com esta matriz montada podemos efetuar trocas do tipo rodadas e/ou

mandantes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tinha pensado em algo assim. O problema da minha lógica era conseguir encaixar times sem duplicações mesmo, e a preguiça de refazer todos aqueles SQL em alguma linguagem :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este é o tipo de problema que deixa nerds que nem eu maluco.

Vendo NFL ontem na TV uma solução me ocorreu

Vamos supor 4 times para simplificar A B C D

 

Monta-se uma matriz

    
    A	 B   C	 D 	
---+---+---+---+---+
A  |   |   |   |   | 
---+---+---+---+---+
B  |   |   |   |   |			  
---+---+---+---+---+ 
C  |   |   |   |   | 
---+---+---+---+---+
D  |   |   |   |   |

 

Elimina-se o auto confronto

 

     
   A	 B   C	 D 	
---+---+---+---+---+
A  | - |   |   |   | 
---+---+---+---+---+
B  |   | - |   |   |			  
---+---+---+---+---+ 
C  |   |   | - |   | 
---+---+---+---+---+
D  |   |   |   | - |

 

Escolhe um time de forma alatoria, D por exemplo e o adversário A por exemplo,

estes recebem as rodados 1 e 4 pois temos (n-1)*2 de rodadas


    A	 B   C	 D 	
---+---+---+---+---+
A  | - |   |   | 4 | 
---+---+---+---+---+
B  |   | - |   |   |			  
---+---+---+---+---+ 
C  |   |   | - |   | 
---+---+---+---+---+
D  | 1 |   |   | - |

 

Sobra na 1 e 4 rodados B e C , mas com mais times o passo acima seria recursivo, entre B e C, escolhemos D como 1º

mandante

 

    A	 B   C	 D 	
---+---+---+---+---+
A  | - |   |   | 4 | 
---+---+---+---+---+
B  |   | - | 1 |   |			  
---+---+---+---+---+ 
C  |   | 4 | - |   | 
---+---+---+---+---+
D  | 1 |   |   | - |

Os passos seriam repetidos e teriamos algo como

 

     
    A	 B   C	 D 	
---+---+---+---+---+
A  | - | 3 | 2 | 4 | 
---+---+---+---+---+
B  | 6 | - | 1 | 2 |			  
---+---+---+---+---+ 
C  | 5 | 4 | - | 6 | 
---+---+---+---+---+
D  | 1 | 5 | 6 | - |

Com esta matriz montada podemos efetuar trocas do tipo rodadas e/ou

mandantes.

 

 

Não consegui entender muito bem o que você fez, porque não sei muito sobre matrizes, mas vou estudar um pouco sobre para sanar minha dificuldade.

 

Muito Obrigado! :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola galera! Bom, sei como é tenso isso de criar tabelas! Agora, eu descobri uma maneira que talvez seja MENOS DIFÍCIL. Consiste no seguinte: Fazer uma espécie de quadro onde verticalmente inserimos as letras dos times e horizontalmente as mesmas letras. Risca-se qdo houver coincidência de letras nos quadros. Então vamos enumerando os quadro de acordo com as rodadas dos confrontos, inclusive no INVERSO. Aviso que quase sempre rola de "dar ruim" pra cruzar os confrontos, pois pode haver de surgir confronto REPETIDO. O que atenua isso é ir escrevendo os confrontos já decididos daquela rodada que você esteja fazendo. Então assim vai fazendo até o final, depois vai posicionando os mandos até ficar do seu gosto, se quiser criar um torneio em "turno e returno" é só INVERTER os mandos dos confrontos a partir da segunda metade da tabela. Enfim... explicando assim talvez seja difícil entender, mas vou ver se consigo colocar aqui um "modelo" do esquema, alem da tabela mesmo em si(14 equipes, 18 equipes e 22 equipes). Ah! Melhor fazer com número PAR de equipes, pois com numero ÍMPAR fica MAIS DIFÍCIL ainda porque teria que se retirar uma equipe por rodada devido a "folga". Valeu galera, até a próxima!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola pessoas! Novidades! Bom, tô trabalhando "no braço" mesmo. Seguinte: já criei algumas tabelas (pares): 10, 12, 14, 16, 18, 20 e 22 times, (ímpares): 9, 11, 13, 15, 17 e 19 times... UFA!!! q trabalho danado! 😥 mas ainda vou fazer mais ímpares: 21, 23, 25 e 27 times e pares: 24, 26 e 28 times. Prometo postar tudo aqui qdo tiver pronto! Por enquanto vou postar uma "tabela modelo" com 8 times:

TABELA DE EXEMPLO

8 EQUIPES

1a Rodada

Equipe 2 x Equipe 8

Equipe 6 x Equipe 3

Equipe 5 x Equipe 4

Equipe 1 x Equipe 7

2a Rodada

Equipe 3 x Equipe 2

Equipe 4 x Equipe 1

Equipe 8 x Equipe 6

Equipe 7 x Equipe 5

3a Rodada

Equipe 5 x Equipe 2

Equipe 1 x Equipe 3

Equipe 6 x Equipe 4

Equipe 7 x Equipe 8

4a Rodada

Equipe 2 x Equipe 4

Equipe 6 x Equipe 1

Equipe 3 x Equipe 7

Equipe 8 x Equipe 5

5a Rodada

Equipe 7 x Equipe 2

Equipe 1 x Equipe 8

Equipe 5 x Equipe 6

Equipe 4 x Equipe 3

6a Rodada

Equipe 1 x Equipe 5

Equipe 6 x Equipe 2

Equipe 4 x Equipe 7

Equipe 3 x Equipe 8

7a Rodada

Equipe 2 x Equipe 1

Equipe 7 x Equipe 6

Equipe 8 x Equipe 4

Equipe 5 x Equipe 3

Valeu ate a próxima!

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.