Ir para conteúdo

Arquivado

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

diegoaugusto

Sistema de prova de laço

Recommended Posts

Boa tarde Pessoal, peguei um trabalho para fazer e falta apenas um detalhe que já quebrei a cabeça.

No meu banco eu cadastro todos os laçadores de cabeça e os laçadores de pez em 2 tabelas distintas:

 

create table lacadores (
id_lacador int(11) not null auto_increment,
id_evento int(11) default null,
nome varchar(255) default null,
valor float(9,2) default null,
primary key(id_lacador)
);

create table pezeros (
id_pezero int(11) not null auto_increment,
id_evento int(11) default null,
nome varchar(255) default null,
valor float(9,2) default null,
primary key(id_pezero)
);

Apos o cadastro todos os laçadores tem que correr "LAÇAR UM BOI" com todos os pezeros. Então criei 2 tabelas para gerar como se fosse as rodadas. O problema que nem pezero nem laçador pode correr mais de uma vez em cada rodada.

 

create table bolao (
id_bolao int(11) not null auto_increment,
id_evento int(11) default null,
rodada varchar(255) default null,
primary key(id_bolao)
);

create table bolao_cruzamentos(
id_bolao_cruzamento int(11) not null auto_increment,
id_bolao int(11) default null,
id_lacador int(11) default null,
id_pezero int(11) default null,
primary key(id_bolao_cruzamento)
);

Fiz de uma maneira aqui puxando pelo while todos cadastros de laçadores e fazendo a rodada de cada laçador gravando com cada pezero.

 

O problema e que na primeira rodada todos os laçadores corre com o mesmo pezero.

 

Como eu faria para fazer corretamente a inserção na tabela?

Compartilhar este post


Link para o post
Compartilhar em outros sites

primeiro de tudo, primeirinho de tudo mesmo, por que duas tabelas para os laçadores? tu pode ter um campo na tabela de nome tipo_lacador por exemplo pra dizer se é cabeçudo ou pezudo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tinha pensado pela forma dos 2 whiles nem me atentei a criar um campo onde 1 poderia ser cabeceiro e 2 pezeiro mais creio que de ambas as formas minha duvida seguira a mesma como fazer para criar a rodada de uma maneira que um cabeceiro e um pezeiro so corra uma vez por rodada

Compartilhar este post


Link para o post
Compartilhar em outros sites

tu pode ter uma tbRodadas e nela meteres os dados da rodada tipo id, data, hora, numero(se for o caso) e demais detalhes concernente a rodada. eu não faço ideia de como funciona essas parada aí de rodeio e tals mas a ideia geral é cada tabela ter somente os dados referentes ao que ela vai guardar. tabela de rodada só com dados da rodada. aí acho que vai precisar de uma outra tabela tbRodadaDetalhes para os detalhes da rodada tipo id da rodada na tbRodadas, id de quem correu, pontuação do corredor e tal. aí na hora de cadastrar o corredor só ver se ele já tem um registro praquela rodada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade data, hora, pontuação não é necessário, esse cliente precisa apenas gerar a rodada por exemplo:

 

Laçadores:
Diego
Carlos
Henrique
Wesley
Fabio
 
Pezeros:
Lucas
Eduardo
Marcio
Luciano
Vitor
 
ai criar as rodadas de competição assim:
 
1 Rodada:
Diego e Lucas
Carlos e Eduardo
Henrique e Marcio
Wesley e Luciano
Fabio e Vitor
 
2 Rodada 
Diego e Eduardo
Carlos e Lucas
Henrique e Luciano
Wesley e Vitor
Fabio e Marcio 
 
e assim por diante ate todos os Laçadores correrem com os pezeros.
 
Desculpa ate talvez para alguns seja algo simples, mais tem apenas 4 meses que trabaho com programação e estou apanhando d+ nessa tela que preciso criar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

então vamos lembrar das matrizes de nossa querida matematica

 

temos os grupos letras e numeros

ABCDE

12345

 

aí relaciona todos com todos igual o brasileirão

 

A e 1

A e 2

A e 3

A e 4

A e 5

 

B e 1

B e 2

B e 3

B e 4

B e 5

...

 

a mesma coisa na programção tipo

 

$alpha = array('A', 'B', 'C', 'D', 'E'); // array com as letras
$nums = array('1', '2', '3', '4', '5'); // array com os números

$na = count($alpha); // pegamos a quantidade de letras na array $alpha
$nn = count($nums); // pegamos a quantidade de números na array $nums

// agora bora lá distribuir todos com todos
for($l = 0; $l < $na; $l++){
    for($n = 0; $n < $nn; $n++){
        echo $alpha[$l] . ' com ' . $nums[$n] . '<hr>';
    }
}


 

mais ou menos isso aí veja se pega a lógica

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum legal, agora uma duvida relacionada mais ao PHP, como eu colocaria por exemplo 

$alpha tudo que tem no meu banco dentro de um array.

 

Hoje uso assim:
 

while ($vetor=mysql_fetch_array($sql)) {

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso aí já é um array, olha o nome array depois do fetch. a lógica é a mesma só mudou for por while. for, while e foreach tem a mesma função de iterar sobre arrays com algumas poucas diferenças. se tem duas tabelas como falou vais botar as duas em dois whiles no lugar das letras e números do meu exemplo. só vais mudar isso, for por while e minhas arrays pelas das duas tabelas. agora se vais usar uma tabela só como falei no primeiro comentário aí vai ter que separar cabeças de pés. aí tu pode montar outras duas arrays cada uma com seu tipo. vamos supor que na tabela tem os campos nome com o nome da figura e tipo com o cabeceiro ou pezeiro

$arr_cab = array();
$arr_pez = array();

while ($vetor=mysql_fetch_array($sql)){
    if($vetor['tipo'] == 'cabeceiro'){
        array_push($arr_cab, $vetor['nome']);
    }else{
        array_push($arr_pez, $vetor['nome']);
    }
}

 

array_push é uma função que acrescenta elementos a uma array já existente. agora é só iterar sobre $arr_cab e $arr_pez no lugar das duas que eu dei de exemplo anteriormente

Compartilhar este post


Link para o post
Compartilhar em outros sites

marsolim o problema e que fica em ordem.

se eu tenho 2 cabeceiros e 2 pezeiros por exemplo

 

Cabeceiro:

Bruno

Wesley 

 

Pezeiro:

Vitor

Lorran

 

quando esta gerando as rodadas ta ficando assim:

 

Bruno e Vitor

Wesley e Vitor

Bruno e Lorran

Wesley e Lorran

 

na rodada esta ficando todos cabeceiros com o mesmo pezeiro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a lógica no caso é formar todas as rodadas nesse loop e fazer o cadastro de todas elas de uma vez só ou seja. seguindo meu exemplo anterior ficaria assim

RODADA 1
A - 1
B - 2
C - 3
D - 4
E - 5

RODADA 2
A - 2
B - 3
C - 4
D - 5
E - 1

RODADA 3
A - 3
B - 4
C - 5
D - 1
E - 2

RODADA 4
A - 4
B - 5
C - 1
D - 2
E - 3

RODADA 5
A - 5
B - 1
C - 2
D - 3
E - 4

 

vamos dar uma incrementada mais ou menos assim

 

$arr_cab = array();
$arr_pez = array();

while ($vetor=mysql_fetch_array($sql)){
    if($vetor['tipo'] == 'cabeceiro'){
        array_push($arr_cab, $vetor['nome']);
    }else{
        array_push($arr_pez, $vetor['nome']);
    }
}

$nc = count($arr_cab); // pegamos a quantidade de letras na array $alpha
$np = count($arr_pez); // pegamos a quantidade de números na array $nums
$i = 0;

// agora bora lá distribuir todos com todos
for($c = 0; $c < $nc; $c++){
    for($p = 0; $p < $np; $p++){
        $i = (($i == $np) ? 0 : $i++);
        echo $arr_cab[$c] . ' com ' . $arr_pez[$i] . '<hr>';
    }
}

ve se desse jeito dá o echoa a lista do jeito que espera. aí a ideia depois disso é formar a query pra cadastrar todas as rodadas de uma vez ou seja já tem os brody tudo cadastrado e agora vai gerar as rodadas pra eles igual o brasileirão mesmo não é?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso e basicamente igual ao brasileirão, mais dessa maneira não funcionou, ate que os cabeceiros ele pegou todos, mais os pezeiros so o primeiro da lista.

 

no meu banco eu possuo 2 cabeceiros e 2 pezeiros

 

 

bolao.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou terminando um trabalhinho aqui, já posto a solução

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha tenta adaptar o meu modelo ao seu aí trocando as arrays

$alpha = array('A', 'B', 'C', 'D', 'E'); // array com as letras
$nums = array('1', '2', '3', '4', '5'); // array com os números

$na = count($alpha); // pegamos a quantidade de letras na array $alpha
$nn = count($nums); // pegamos a quantidade de números na array $nums

$i = 0;

// agora bora lá distribuir todos com todos
for($n = 0; $n < $na; $n++){
    for($a = 0; $a < $na; $a++){
        echo $alpha[$a] . ' com ' . $nums[$i] . '<br>';
        $i = (($i == $nn - 1) ? 0 : $i + 1);
    }
    $i += 1;
    echo '<hr>';
}

MEU RESULTADO

 

A com 1
B com 2
C com 3
D com 4
E com 5


A com 2
B com 3
C com 4
D com 5
E com 1


A com 3
B com 4
C com 5
D com 1
E com 2


A com 4
B com 5
C com 1
D com 2
E com 3


A com 5
B com 1
C com 2
D com 3
E com 4

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marsolim funcionou quase que perfeitamente, o unico problema que ainda estou tendo e quando o numero de cabeçeiros e pezeiros não é igual.

 

Por exemplo se eu tiver mais pezeiros ele só cria a primeira rodada, e se eu tiver mais cabeceiros ele cria um monte de rodada sem ninguem como pezeiro, mais no mais e isso mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

e como deve ficar quando assim fores? tipo se tiver mais cabeça ou mais pé?

tipo mais cabeça
========================
| CABEÇA   | PÉ        |
========================
| batman   | flash     |
|----------+-----------|
| gavião   | superman  |
|----------+-----------|
| dick     |           |
|----------+-----------|
| guy      |           |
|----------+-----------|

tipo mais pé
========================
| CABEÇA    | PÉ       |
========================
| aranha    | ciclope  |
|-----------+----------|
| wolverine | mercurio |
|-----------+----------|
|           | iron man |
|-----------+----------|
|           | tocha    |
|-----------+----------|

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
×

Informação importante

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