Ir para conteúdo
Fórum Script Brasil

Denis Courcy

Moderadores
  • Total de itens

    3.089
  • Registro em

  • Última visita

Posts postados por Denis Courcy

  1. Este cara aqui

    19 horas atrás, Ewerton de Souza disse:

    join lda_configuracao c

    liga com quem?

    Este cara aqui

    19 horas atrás, Ewerton de Souza disse:

    where  1=1

    Não tem necessidade.

    Em um join entre A e B, se a tabela B tiver 2 registros que correspondam ao join com A, então ela retornará os dois registros.

     

  2. Você não está comparando tijolo com pipoca?

    sorteio_cliente contem dados de cliente informados em cliente_id? 

    Nesta ligação ( INNER JOIN cliente ON (sorteio_cliente = cliente_id) ) de onde vem respectivamente os campos sorteio_cliente e cliente_id

    sorteio_cliente contem dados de cliente informados em premio_id? 

    E nesta ligação (INNER JOIN premio ON (sorteio_cliente = premio_id)) de onde vem respectivamente os campos sorteio_cliente  e premio_id?

  3. Isto é trabalho escolar? Se quer que o façamos pra você, esqueça.

    Poderemos te ajudar, mas não fazê-lo do zero.

    Mostre o que você já entendeu ou começou a fazer e te orientaremos.

  4. Use storage procedure.

    Segue abaixo um exemplo de um CRUD para prestadores(médicos) e suas especialidades.

    Demais campos usados nestas tabelas foram suprimidos deste exemplo.

    Prestador e especialidade se relacionam em muitos para muitos através da tabela prestador_especialidade.

    O campo ação deve ser I ou A ou E, respectivamente para Inclusão, Alteração e Exclusão.

    O campo pidPrestador deve ser preenchido com 0 para Inclusão e com o ID do prestador para as demais ações.

    use assim:

    CALL prestador_crud("I", 0, "nomedomedico");

    A resposta vem em um select que você pode usar normalmente;

    Espero que seja útil

    DELIMITER $$
    
    USE `sase`$$
    
    DROP PROCEDURE IF EXISTS `prestador_crud`$$
    
    CREATE DEFINER=`root`@`localhost` PROCEDURE `prestador_crud`(IN Acao CHAR(1), IN pidPrestador INTEGER, IN pnmPrestador VARCHAR(50),  
       IN pidEspecialidade INTEGER)
    BEGIN
       DECLARE ppnmEspecialidade VARCHAR(50); -- usado para testar se especialidade medica está previaemte cadastrada
       DECLARE msg VARCHAR(1000) DEFAULT "sem mensagem";
       DECLARE excecao SMALLINT DEFAULT 0;
       DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excecao = 1;
       
       SELECT nmEspecialidade INTO ppnmEspecialidade FROM especialidade WHERE idEspecialidade = pidEspecialidade;
       IF ppnmEspecialidade IS NULL THEN
          SET excecao = 1;
          SET msg = "MySQL: Erro: não Localizei Especialidade ao Gravar Medico/Prestador";
       END IF;
    
       IF pnmPrestador = "" OR (Acao <> "I" AND pidPrestador = 0) THEN
       -- os demais campos já foram validados pelo programa antes de entrar nesta peocedure
          SET msg = "MySQL: Erro na passagem de parametros";
          SET excecao = 1;
       ELSE
          START TRANSACTION;
          /*Inclusao de Medico/Prestador*/
          IF Acao = "I" THEN
             INSERT INTO prestador(nmPrestador)
             VALUES (pnmPrestador);
             IF excecao <> 1 THEN
                SELECT DISTINCT LAST_INSERT_ID() INTO @ppidPrestador FROM prestador;
             ELSE   
                SET msg = "MySQL: Erro ao inserir na tabela de prestador";
                ROLLBACK;
             END IF;
          END IF;
          IF excecao <> 1 THEN
             IF Acao <> "I" THEN
                SET @ppidPrestador = pidPrestador;
                DELETE FROM prestador_especialidade WHERE idPrestador = @ppidPrestador;
                IF excecao = 1 THEN
                   SET msg = CONCAT("MySQL: Erro ao excluir prestador_especialidade. Acao = \"", Acao, "\" Prestador = ", pidPrestador);
                   ROLLBACK;
                END IF;
             END IF;
             /*Alteracao de Medico/Prestador*/
             IF Acao = "A" THEN
                UPDATE prestador
                SET nmPrestador = pnmPrestador
                WHERE idPrestador = @ppidPrestador;
                IF excecao = 1 THEN
                   SET msg = "MySQL: Erro ao atualizar prestador";
                   ROLLBACK;
                END IF;
             END IF;
          END IF;
          IF excecao <> 1 AND Acao <> "E" THEN
             INSERT INTO prestador_especialidade(idPrestador, idEspecialidade)
             VALUES(@ppidPrestador, pidEspecialidade);
             IF excecao = 1 THEN
                SET msg = "MySQL: Erro ao inserir em prestador_especialidade na inclusao/alteracao de prestador";
                ROLLBACK;
             END IF;
          END IF;
          /*Exclusao de Medico/Prestador*/
          IF excecao <> 1 THEN
             IF Acao = "E" THEN
                DELETE FROM prestador
                WHERE idPrestador = pidPrestador;
                IF excecao = 1 THEN
                   SET msg = "MySQL: Erro ao excluir Medico/Prestador";
                   ROLLBACK;
                END IF;
             END IF;
          END IF;
       END IF;
       /*Se tudo deu certo, ent?o finaliza confirmando a grava??o.*/
       IF excecao <> 1 THEN
          COMMIT;
          IF Acao = "I" THEN
             SET msg = "MySQL: Medico/Prestador Incluido com sucesso";
          ELSE
             IF Acao = "A" THEN
                SET msg = "MySQL: Medico/Prestador Alterado com sucesso";
             ELSE
                SET msg = "MySQL: Medico/Prestador Excluido com sucesso";
             END IF;
          END IF;
       END IF;
       SELECT msg AS msg;
    END$$
    
    DELIMITER ;

     

  5. Em 07/03/2018 at 14:12, flavio.cunha disse:

    Prezados tenho um aplicação que esta com o uma tabela com mais de 3GB totalizando mais de 5 milhoes de registros

    e esta muito lendo impossível de trabalhar

    Alguma sugestão para melhor isso ?

    Dependendo da tabela, a maioria dos dados contidos nela são históricos e de baixa procura. Talvez seja interessante passar para uma tabela de histórico os dados do início da tabela até determinado período, deixando na tabela principal os dados mais atuais e de maior índice de acesso.

×
×
  • Criar Novo...