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. Corrigido

    CREATE DATABASE prova;
    USE prova;
    CREATE TABLE professor(
        id_professor INT NOT NULL,
        nome VARCHAR(50) NOT NULL,
        disciplinas VARCHAR(20) NOT NULL,
        PRIMARY KEY (id_professor)
    );
    CREATE TABLE disciplinas(
      id_disciplinas INT NOT NULL,
        Materias VARCHAR(30) NOT NULL,
        professor VARCHAR(30) NOT NULL,
        PRIMARY KEY (id_disciplinas)
    );
    CREATE TABLE alunos(
        id_alunos INT NOT NULL,
        nome VARCHAR(50) NOT NULL,
        notas INT NOT NULL,
        PRIMARY KEY (id_alunos)
    );
    INSERT INTO professor(id_professor,nome,disciplinas)
    VALUES ('1', 'Emilio Fernandes','Lingua Portuguesa'),
    ('2', 'Francisco Gomes','Matematica'),
    ('3', 'Daniel Estrada','Filosofia'),
    ('4', 'Celio Drummond','Sociologia'),
    ('5', 'Abelardo Barbosa','Historia'),
    ('6', 'Bernardo Costa','Fisica');
    INSERT INTO disciplinas(id_disciplinas,Materias,professor) 
    VALUES ('1','Lingua Portuguesa','Emilio Fernandes'),
    ('2','Matematica','Francisco Gomes'),
    ('3','Filosofia','Daniel Estrada'),
    ('4','Sociologia','Celio Drummond'),
    ('5','Historia','Abelardo Barbosa'),
    ('6','Fisica','Bernardo Costa');
    INSERT INTO alunos(id_alunos,nome,notas) 
    VALUES ('1','Lucas','6'),
    ('2','Marcos','7'),
    ('3','Maria','8'),
    ('4','Felipe','9'),
    ('5','Paulo','10');
    SELECT AVG(notas) FROM alunos;
    SELECT nome FROM alunos
    ORDER BY nome;
    SELECT nome FROM professor
    ORDER BY nome DESC;
    SELECT nome FROM professor 
    ORDER BY nome;
    SELECT id_alunos FROM alunos;

     

  2. Em minha base de teste criei as tabelas abaixo e populei conforme a imagem que você forneceu:

    CREATE TABLE rec_lider(
    cd VARCHAR(30),
    totalRecebido INTEGER)
    ;
    INSERT INTO rec_lider(cd,totalrecebido)
    VALUES('OSASCO',20),
    ('CAJAMAR',10),
    ('são PAULO',15),
    ('OSASCO',30),
    ('OSASCO',40),
    ('JUNDIAI',50),
    ('RECIFE',10),
    ('RECIFE',40),
    ('OSASCO',20),
    ('CAJAMAR',30)
    ;
    CREATE TABLE rec_fiscal(
    cd VARCHAR(30),
    totalRecebimento INTEGER)
    ;
    INSERT INTO rec_fiscal(cd,totalrecebimento)
    VALUES('OSASCO',20),
    ('CAJAMAR',10),
    ('são PAULO',15),
    ('OSASCO',30),
    ('OSASCO',40),
    ('JUNDIAI',50),
    ('RECIFE',10),
    ('RECIFE',40),
    ('OSASCO',20),
    ('CAJAMAR',30)
    ;

    Executei o select abaixo:

    
    SELECT rl.Unidade, `Total Recebido`, `Total Recebimento`
    FROM (SELECT cd AS Unidade,
       SUM(total_recebido) AS `Total Recebido`
       FROM rec_lider
       GROUP BY cd
    ) rl
    INNER JOIN (SELECT cd AS Unidade,
       SUM(total_recebimento) AS `Total Recebimento`
       FROM rec_fiscal
       GROUP BY cd
    ) rf ON rf.Unidade = rl.Unidade
    GROUP BY rl.Unidade
    ;

     

  3. Controle através da linguagem de programação.

    Mas, se quiser controlar no banco, informe qu o campo é not null. Faça uma trigger para controlar o intervalo. Se não estiver de acordo informe NULL para o campo. A inclusão não será realizada.

    Outra forma, que é a que faço, utiliza storage procedure para controlar a gravação. Assim é possível enviar mensagem informando o porquê da rejeição.

  4. 16 horas atrás, Rodrigo83 disse:

    Ao criar uma TRIGGER no sqlServer existe uma função chamada  BINARY_CHECKSUM que comparar os campos que realmente tiveram alterações assim podendo fazer a ação somente no que foi alterado de fato. Existe algo parecido no mysql ? Se sim como fazer ?

    Faça o trigger normalmente. O motor do MySQL já faz isso por você.

  5. Conforme mostra a imagem que você postou no outro site e que tomei a liberdade de postar aqui,

    tabelas.png

    Isto acontece por causa do join que você está impondo em seu select .

    Segundo a estrutura de suas tabelas, cada elemento de rec_lider apontará para vários elementos de rec_fiscal que correspondam a igualdade rec_lider.cd = rec_fiscal.cd.

    Exemplo: Tomando cd = Osasco, O primeiro registro de rec_lider(Osasco, 20) apontará para os seguintes registros em rec_fiscal (Osasco 20),((Osasco 30), Osasco, 40) e (Osasco, 20); O registro (Osasco, 30) em rec_fiscal apontará para os mesmos registros em rec_fiscal e etc.

    A solução é somar  rec_lider antes de conectar o join. Somar os dados de rec_fiscal, também, antes de  conectar o join. E realizar um join para exibir os totais.

    Por que fazer assim?

    Porque assim, assim rec_fiscal.cd terá somente um registro por cd, assim como rec_lider.cd

    Então teremos:

    SELECT Unidade, `Total Recebido`, `Total Auditado`, `Total Devolvido`
    FROM (SELECT rec_lider.cd AS Unidade,
       SUM(rec_lider.total_recebido) AS `Total Recebido`,
       FROM rec_lider
       GROUP BY rec_lider.cd
    ) rl
    INNER JOIN (SELECT rec_fiscal.cd AS Unidade,
       SUM(rec_fiscal.total_recebimento) AS `Total Auditado`,
       SUM(rec_fiscal.total_devolvido) AS `Total Devolvido`
       FROM rec_fiscal
       GROUP BY rec_fiscal.cd
    ) rf ON rf.Unidade = rc.Unidade
    GROUP BY rl.Unidade

     

  6. Comece eliminando possíveis problemas:

    Faça uma string de conexão sem o uso de variáveis:

    strConexao = "Driver={MySQL ODBC 3.51 Driver};SERVER=localhost; DATABASE=info16br; Uid=root; Pwd=admin"

    Use o MyODBC 5.x para versões do MySQL acima da versão 5.x e com Windows XP SP3 ou maior

    Em seu sql

    strSql = strSql & + " WHERE " + request.Form("modo") + " LIKE " + "'%" + 

    Não está faltando algo entre o LIKE e o %?

  7. Remova os @ de dentro da procedure para todas as variáveis declaradas dentro da procedure.

    Exemplo:

    Você declarou

     declare table_id int;

    Então deve tratar

    select r_table from S_QOS_DATA where table_id = @table_id

    como 

    select r_table from S_QOS_DATA where table_id = table_id

    Eu uso um padrão para evitar conflito entre nomes de variáveis e campos dentro da procedure. Toda variável é declarada com um "p" de procedure na frente do nome da variável. Assim, a declaração seria

     declare ptable_id int;

    e o uso:

    select r_table from S_QOS_DATA where table_id = ptable_id

    Tratamento para o parâmetro query quando no uso de um comando prepare:

    Transfira o conteúdo de query para uma variável pública :

    SET @ppquery = query;
    prepare stmt from @ppquery;
    EXECUTE stmt;
    deallocate prepare stmt;

    @ppquery não deve ser declarada dentro da procedure. Ela tem visão pública e o comando prepare não aceita variáveis private.

  8. Se você está tentando atualizar os valores de Produtos que não tem item de pedido, então o select deveria ser assim:

    UPDATE produto p
    LEFT JOIN itempedido ip ON ip.idProduto = p.idProduto
    set p.valorUnitario=20
    where ip.idproduto IS NULL;

     

     

  9. No código abaixo não está faltando a cláusula WHERE?

    3 horas atrás, pass_joao disse:

    $stmt = $PDO->prepare('SELECT g.id_pessoa as matricula, p.nome as nome, p.email as email, g.grupo as grupo FROM tbl_pessoa_turma g join tbl_pessoaas p on (g.matricula = p.matricula) ORDER BY nome DESC'); $stmt->bindParam('matricula', $id_rel, PDO::PARAM_INT);

    Leia mais sobre PDOStatement::bindParam em http://php.net/manual/pt_BR/pdostatement.bindparam.php

     

  10. Na tabela vendas crie um índice por (codven,dataven). A ideia é evitar ou diminuir ao máximo o filesort.

    Ele está usando o índice idx_vendas_codven para a cláusula where e filesort.

    Use SELECT STRAIGHT_JOIN  para forçar o motor do MySQL a ler o select da esquerda para a direita. Ou seja, para que execute conforme a ordem que você montou o select.

    SELECT STRAIGHT_JOIN cli.CLICOD, cli.CLINOM, cli.CLICPF,  
    vda.CODVEN,vda.DATVEN, vda.NUMVEN, vda.CLIVEN, vda.QTDVEN, vda.VALVEN, vda.ESPVEN, vda.TOTVEN, 
    vda.MARCADO, vda.CUPOM, 
    IF(vda.CUPOM!='S'   AND  vda.MARCADO!='S',vda.QTDVEN,0)   AS VENDAS_OUTRAS, 
    IF(vda.CUPOM='S', vda.QTDVEN,0)  AS VENDAS_CUPOM, 
    IF(vda.MARCADO='S',vda.QTDVEN,0)  AS VENDAS_NF, 
    tv.CODVENDA, tv.ENTRADA_SAIDA 
    FROM vendas AS vda 
    LEFT JOIN clientes AS cli     ON  cli.CLICOD = vda.CLIVEN 
    LEFT JOIN tvenda AS tv ON vda.NUMVEN = tv.CODVENDA 
    WHERE  vda.CODVEN = 1
    AND  vda.CODVEN !=0
    order by vda.DATVEN DESC

     

  11. Bom dia. Por favor poste o resultado do select abaixo:

    EXPLAIN SELECT cli.CLICOD, cli.CLINOM, cli.CLICPF,  
    vda.CODVEN,vda.DATVEN, vda.NUMVEN, vda.CLIVEN, vda.QTDVEN, vda.VALVEN, vda.ESPVEN, vda.TOTVEN, 
    vda.MARCADO, vda.CUPOM, 
    IF(vda.CUPOM!='S'   AND  vda.MARCADO!='S',vda.QTDVEN,0)   AS VENDAS_OUTRAS, 
    IF(vda.CUPOM='S', vda.QTDVEN,0)  AS VENDAS_CUPOM, 
    IF(vda.MARCADO='S',vda.QTDVEN,0)  AS VENDAS_NF, 
    tv.CODVENDA, tv.ENTRADA_SAIDA 
    FROM vendas AS vda 
    LEFT JOIN clientes AS cli     ON  cli.CLICOD = vda.CLIVEN 
    LEFT JOIN tvenda AS tv ON vda.NUMVEN = tv.CODVENDA 
    WHERE  vda.CODVEN = 1
    AND  vda.CODVEN !=0
    order by vda.DATVEN DESC

     

×
×
  • Criar Novo...