Raz 0 Denunciar post Postado Março 11, 2011 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
André Severino 3 Denunciar post Postado Março 11, 2011 Certo, insira o código completo, pois tem muitas variaveis vagando das quais acredito que venha do banco de dados. Compartilhar este post Link para o post Compartilhar em outros sites
Raz 0 Denunciar post Postado Março 11, 2011 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
André Severino 3 Denunciar post Postado Março 12, 2011 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
Raz 0 Denunciar post Postado Março 12, 2011 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
André Severino 3 Denunciar post Postado Março 12, 2011 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
Raz 0 Denunciar post Postado Março 12, 2011 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
André Severino 3 Denunciar post Postado Março 12, 2011 Ah tá, é que no topico você tinha colocado que a tabela tava em branco -_- Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Março 12, 2011 Então o problema desde o início é apenas o HTML. Um exemplo de como você quer que fique o resultado na tabela? Compartilhar este post Link para o post Compartilhar em outros sites
Raz 0 Denunciar post Postado Março 12, 2011 Muito obrigado pelas respostas. Ela pode ficar no mesmo "estilo" que esta: Tabela Compartilhar este post Link para o post Compartilhar em outros sites
André Severino 3 Denunciar post Postado Março 12, 2011 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
Raz 0 Denunciar post Postado Março 13, 2011 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
William Bruno 1501 Denunciar post Postado Março 15, 2011 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
Raz 0 Denunciar post Postado Março 15, 2011 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
André Severino 3 Denunciar post Postado Março 17, 2011 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
Raz 0 Denunciar post Postado Março 18, 2011 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