Então pessoal, a ideia é fazer um aplicativo de Bolão. Já esta tudo funcionando. Mas agora preciso pesquisar os ganhadores com base nas 5 dezenas sorteadas. Tem como colocar as 5 dezenas utilizando o operador LIKE e OR?
BANCO FIREBIRD 2.5
CAMPO JOGO É UM VARCHAR
Qual banco de dados você está utilizando? O campo ‘jogo’ seria um varchar?
Supondo que cada aposta tem 10 números e a pessoa precisa acertar 5 desses, você pode tentar algo como
select * from <TABELA> where
(JOGO like '%PRIMEIRO_NUMERO_SORTEADO%') and
(JOGO like '%SEGUNDO_NUMERO_SORTEADO%') and
(JOGO like '%TERCEIRO_NUMERO_SORTEADO%') and
(JOGO like '%QUARTO_NUMERO_SORTEADO%') and
(JOGO like '%QUINTO_NUMERO_SORTEADO%');
Obs: fiz de cabeça, ajuste a sintaxe caso seja necessário.
Substitua <TABELA>
pelo nome da sua tabela de jogo e PRIMEIRO_NUMERO_SORTEADO
e afins pelos números sorteados. Isso deve retornar os jogadores que acertaram os 5 números sorteados.
PS: se for aumentar a complexidade desse aplicativo, considere usar tabelas separadas para os jogos, jogadores e números sorteados, fazendo as consultas através de joins. Isso te permitiria, por exemplo, saber que acertou os 5 números usando count()
, por exemplo.
Abraço.
Com o jogo armazenado em um varchar o LIKE não vai resolver seu problema, porque ele vai retornar verdadeiro pra cada dezena sorteada que existir, sem contar quantas dezenas o apostador acertou.
Para este caso, te recomendo usar isso:
select nome, telefone, observacao, jogo
from apostas
where position('06', jogo) > 0
and position('17', jogo) > 0
and position('11', jogo) > 0
and position('05', jogo) > 0
and position('23', jogo) > 0
numa simulação em que as dezenas sorteadas foram 05, 06, 11, 17 e 23. O negócio aí é o seguinte: essa função retorna a posição em que o primeiro argumento(no caso a dezena sorteada) está dentro do segundo (o campo com a string do jogo). Se não encontra retorna zero.
1 curtida
Vendo a resposta do TerraSkilll retiro o que disse sobre o LIKE não resolver.
Interessante, não conhecia essa função position(). Bom que agora há mais opções
Abraços.
O chato é ela ser específica do firebird. Em outros bancos como Oracle por exemplo o mesmo resultado se obtém com a função INSTR()
Soluções interessantes… não conheço firebird, mas indo pelo SQL, eu já vi like sendo usado assim…
select * from tabela where campo like '%texto1%texto2%texto3%'
Tendo isso em mente, seria possível tentar algo assim?
select * from apostas where jogo like "%05%06%11%17%23%"
Isso pensando em performance obviamente, economizaria alguns likes…
1 curtida
Obrigado pelas sugestões! Obraço!
Poxa cara, indica pra nós qual foi a solução? Outras pessoas podem ter a mesma dúvida e estamos curiosos também…
Ao lado de cada post nosso tem um ícone de um tique (próximo ao coraçãozinho do gostei )
1 curtida
pode funcionar desse jeito que você propõe, desde que as dezenas estejam armazenadas em ordem no campo “jogo” e também na string que montar na consulta.