Ir para conteúdo

POWERED BY:

Arquivado

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

andsoave

consulta ao Mysql

Recommended Posts

olá, sou Andsoave, novo no forum, e estou com uma dúvida na consulta ao Mysql, preciso fazer uma comparação de valores entre duas tabelas.

Se alguém puder me dar uma orientação, veja:

É um sistema de bingo a moda antiga, apenas as cartelas serão online, o sorteio será na base do globo, por bolas chamadas.

Sistema:

- O usuário entra no site e após login, prepara sua cartela virtual escolhendo 18 dezenas  de 60(01 a 60).

- esta cartela fica salva numa tabela com os campos palpite_1/palpite_2 ...até palpite_18.

- 3 prêmios aqui. 18 acertos - primeiro, 17 acertos - segundo e 16 acertos -terceiro.

- Criei outra tabela para guardar os números chamados por ordem de chamada, com os campos bola_1, bola_2 .... até bola_60

- Até aqui td bem, td rodando corretamente, meu problema está na conferência.

Problema:

- A bola sorteada terá um valor entre 01 e 60, a cartela tem 18 palpites aleatórios escolhido pelo usuário.

- preciso resgatar as cartelas que possui o valor da respectiva bola e combinando com as demais posteriores.

Minha dificuldade:

_ Não estou sabendo montar a SQL.

Pergunta:

Como faço para percorrer os campos da tabela sendo que o valor da $bola_1 pode ser qualquer um entre 60 dz e estar em qualquer um dos 18 campos dessa tabela?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Publica o modelo de dados.

Creio um sql count group bg com having resolva.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Motta, obrigado pela atenção.

 

o script é em MVC, PDO.

A TB da cartela é Meganet com 18 palpites os campos são palpite_1 até palpite_18

outra TB p/ gravar as bolas sorteadas TB_sorteio os campos são bola1 até bola60

tudo via post para MYSQL.

VEJA:

 // vem da view meganetresultform / controllers meganetresultform_action() mostra Formulário de conferência do sorteio Área ADM
    public function meganetResultForm()
    {
        if (empty($_POST['bola1'])){
            $_SESSION["feedback_negative"][] = FEEDBACK_SORTEIO_ERROR;
            return false;
        }
        $bola1 = strip_tags($_POST['bola1']);
        $bola2 = strip_tags($_POST['bola2']);
        $bola3 = strip_tags($_POST['bola3']);
        $sorteioNum = 1;
        $datasorteio = "10/08/2018";
        
        $sql = "INSERT INTO sorteio (bola1, bola2, bola3, sorteioNum, datasorteio) 
        VALUES(:bola1, :bola2, :bola3, :sorteioNum, :datasorteio)";
        $query = $this->db->prepare($sql);
        $query->execute(array(':bola1' => $bola1, ':bola2' => $bola2,':bola3' => $bola3, ':sorteioNum' => $sorteioNum, ':datasorteio' => $datasorteio));
        $count =  $query->rowCount();
        if ($count != 1) {
            $_SESSION["feedback_negative"][] = FEEDBACK_INSERTAR_SORTEIO_ERROR;
            return false;        
        }
        
        // obtém os dados na TB sorteio, através da $sorteioNum
        $query = $this->db->prepare("SELECT id_sorteio, bola1, bola2, bola3, sorteioNum, datasorteio 
            FROM sorteio WHERE sorteioNum = :sorteioNum");
        $query->execute(array(':sorteioNum' => $sorteioNum));
        if ($query->rowCount() != 1) {
            $_SESSION["feedback_negative"][] = FEEDBACK_ID_SORTEIO_ERROR;
            return false;
        }               
        $result_row = $query->fetch();
        $id_sorteio = $result_row->id_sorteio;             
        $bola1 = $result_row->bola1;
        $bola2 = $result_row->bola2;
        $bola3 = $result_row->bola3;
        $sorteioNum = $result_row->sorteioNum;
        $datasorteio = $result_row->datasorteio;
        $linhaNum1 = 1;

 

// Agora viria a comparação dos dados ....

 

será que dá pra entender?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Publica seu modelo de dados (tabelas do banco)

 

mas ...

supondo uma simplificação

 

cartela 
-------
numero_sorteio
numero_cartela

 

cartela_bola
------------
numero_sorteio
numero_cartela
nomero_bola

 

sorteio
-------
numero_sorteio

 

sorteio_bola
-------------
numero_sorteio
nomero_bola
select c.numero_sorteio,c.numero_cartela,count(c.nomero_bola) acertos
from   cartela_bola c,sorteio_bola select
where  c.numero_sorteio = s.numero_sorteio
and    c.nomero_bola = s.nomero_bola
group by c.numero_sorteio,c.numero_cartela
having count(c.nomero_bola) >= 16

Uma fonte https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nessa tabela ficam os palpites dos usuário, seria a cartela

 

CREATE TABLE IF NOT EXISTS `meganet1` (
  `id_meganet1` int(11) NOT NULL AUTO_INCREMENT,
  `nro_da_sorte` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `nome` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_1` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_2` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_3` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_4` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_5` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_6` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_7` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_8` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_9` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_10` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_11` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_12` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_13` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_14` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_15` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_16` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_17` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `palpite_18` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `user_id` bigint(10) NOT NULL,
  `whats` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `id_indicador` bigint(20) NOT NULL,
  `concordo` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id_meganet1`),
  UNIQUE KEY `nro_da_sorte` (`nro_da_sorte`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT;

 

e nessa salvo as bolas sorteadas por ordem de chamada.(lembrando, o sorteio não é virtual)

 

CREATE TABLE IF NOT EXISTS `sorteio` (
  `id_sorteio` int(11) NOT NULL AUTO_INCREMENT,
  `bola1` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `bola2` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `bola3` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `bola4` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `bola5` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `bola6` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `bola7` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `bola8` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `bola9` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `bola10` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `bola11` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `bola12` int(10) COLLATE utf8_unicode_ci NOT NULL,
  até a bola 60
  `bola60` int(10) COLLATE utf8_unicode_ci NOT NULL,
  `sorteioNum` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
  `datasorteio` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id_sorteio`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=100 ;

 

******************************************************

Motta, pense como se fosse a tele sena do silvio santos, só que com cartelas virtuais mas sorteios ao vivo.

 

A idéia é buscar o valor da bola sorteada nas cartelas dos usuários apostadores, até que alguem acerte todos os números.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado por ambas as informações Motta.

estou lendo tanto sobre a SQL como a normalize.

mas não entendi ainda como encontrar esses valores e combinar com os demais até que uma combinação se complete.

mesmo assim agradeço sua atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o Modelo for normalizado como no post de 15/8/  ontem às 11:38

basta uma sql simples encontrando os valores iguias , não normalizado (uma coluna para cada bola) , não

 

Além do que normalizado permite que se trate qualqeur cartela .

 

Imagine que lançam uma "cartela rápida" com 30 bolas no lugar de 60 ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

não normalizado (uma coluna para cada bola) , não"

Não consegui entender o raciocínio acima,

******

se o usuário logado vai formar sua cartela com 18 dezenas(palpites) escolhidas por ele entre 01 e 60 através de um formulário

não devo guardar o valor de cada palpite em uma coluna?

Não entendi isso, pode me dar um exemplo de como ficaria sua TB ?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como está teu modelo é preciso comparar os 18 palpites com as 60 bolas , isto gera 1080 combinações, o sql teria de tratar isto , tendo uma tabela com os palpites/bolas em linhas só uma comparação , o produto cartesiano seria feito pelo banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Captei vossa mensagem.

Realmente, teria apenas uma coluna para consultar.

um exemplo grosseiro:

tb_palpite

id_palpite ..... palpite ....user_id

      01                 10              5

      02                  15              5

Seria isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim.

O mais importante é entender a modelagem.

80% do Sistema é resolvido aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, seguindo o seu exemplo, minha Base ficou assim:

*****

CREATE TABLE IF NOT EXISTS `cartela` (
  `numero_cartela` int(11) NOT NULL AUTO_INCREMENT,
  `nro_da_sorte` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `nome` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  `numero_whats` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `id_indicador` int(11) NOT NULL,
  `whats_indicador` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `id_base` int(11) NOT NULL,
  `nome_indicador` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  `numero_sorteio` int(11) NOT NULL,
  PRIMARY KEY (`numero_cartela`),
  KEY `fk_cartela_sorteio1_idx` (`numero_sorteio`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;

--
INSERT INTO `cartela` (`numero_cartela`, `nro_da_sorte`, `user_id`, `nome`, `numero_whats`, `id_indicador`, `whats_indicador`, `id_base`, `nome_indicador`, `numero_sorteio`) VALUES
(2, 123456, 7, 'andsoave', '41984009859', 7, '41984009859', 62, 'anderson', 1);

ALTER TABLE `cartela`
  ADD CONSTRAINT `fk_cartela_sorteio1` FOREIGN KEY (`numero_sorteio`) REFERENCES `sorteio` (`numero_sorteio`) ON DELETE NO ACTION ON UPDATE NO ACTION;

**************************

 

CREATE TABLE IF NOT EXISTS `cartela_bola` (
  `idcartela_bola` int(11) NOT NULL AUTO_INCREMENT,
  `numero_bola` int(11) DEFAULT NULL,
  `numero_cartela` int(11) NOT NULL,
  `numero_sorteio` int(11) NOT NULL,
  PRIMARY KEY (`idcartela_bola`),
  KEY `fk_cartela_bola_cartela_idx` (`numero_cartela`),
  KEY `fk_cartela_bola_sorteio1_idx` (`numero_sorteio`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;

--
INSERT INTO `cartela_bola` (`idcartela_bola`, `numero_bola`, `numero_cartela`, `numero_sorteio`) VALUES
(2, 1, 2, 1),
(3, 2, 2, 1),
(4, 3, 2, 1);

--
ALTER TABLE `cartela_bola`
  ADD CONSTRAINT `fk_cartela_bola_cartela` FOREIGN KEY (`numero_cartela`) REFERENCES `cartela` (`numero_cartela`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `fk_cartela_bola_sorteio1` FOREIGN KEY (`numero_sorteio`) REFERENCES `sorteio` (`numero_sorteio`) ON DELETE NO ACTION ON UPDATE NO ACTION;

**************************************************

 

CREATE TABLE IF NOT EXISTS `sorteio` (
  `numero_sorteio` int(11) NOT NULL AUTO_INCREMENT,
  `data` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `hora` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`numero_sorteio`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;

-

INSERT INTO `sorteio` (`numero_sorteio`, `data`, `hora`) VALUES
(1, '15/09/2018', '10:00');

***************************************

 

CREATE TABLE IF NOT EXISTS `sorteio_bola` (
  `idsorteio_bola` int(11) NOT NULL AUTO_INCREMENT,
  `nomero_bola` int(11) NOT NULL,
  `numero_sorteio` int(11) NOT NULL,
  PRIMARY KEY (`idsorteio_bola`),
  KEY `fk_sorteio_bola_sorteio1_idx` (`numero_sorteio`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;

--
INSERT INTO `sorteio_bola` (`idsorteio_bola`, `nomero_bola`, `numero_sorteio`) VALUES
(4, 1, 1),
(5, 2, 1),
(6, 3, 1);

--
ALTER TABLE `sorteio_bola`
  ADD CONSTRAINT `fk_sorteio_bola_sorteio1` FOREIGN KEY (`numero_sorteio`) REFERENCES `sorteio` (`numero_sorteio`) ON DELETE NO ACTION ON UPDATE NO ACTION;

***************************************************

Deixei os INSERTS para servir como exemplo apenas.

-------------------------------------------------------------------------------------------

Diante desses dados, tenho que buscar as cartelas acertadoras, para salvar em outra tabela e como disse anteriormente,

não estou sabendo juntar a instrução PHP e SQL pra executar isso.

Precisava  um exemplo para seguir, é possível?

 

select c.numero_sorteio,c.numero_cartela,count(c.nomero_bola) acertos
from   cartela_bola c,sorteio_bola select
where  c.numero_sorteio = s.numero_sorteio
and    c.nomero_bola = s.nomero_bola
group by c.numero_sorteio,c.numero_cartela
having count(c.nomero_bola) >= 16

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a ajuda dos amigos, mas preciso entender uma processo que não estou conseguindo sucesso.

      Como mencionado no Título estou escrevendo um Sistema Web para Gerenciamento de Empresa.
       
      Minha dúvida, que preciso muito entender:
      - preciso agora escrever a Rotina para Emissão de NFe e essa parte não estou conseguindo.
       
      tenho assistido alguns vídeos e leituras, mas não estou conseguindo sucesso, já fiz toda as importações das LIB da NFePhp conforme orientação.

      Preciso de ajuda.

      Algum dos amigos tem conhecimento de algum passo-a-passo explicando a criação dessa rotina ?

      tenho visto alguns vídeos com LARAVEL, mas quando tento utilizar e converter para PHP+Codeiginter, dá uma fila de erros que não entendo, mesmo informando as lib necessárias.

      Alguns do amigo tem algum vídeo, leitura explicando essa parte ?

      Grato,

      Cesar.
×

Informação importante

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