Ir para conteúdo
Fórum Script Brasil

Denis Courcy

Moderadores
  • Total de itens

    3.089
  • Registro em

  • Última visita

Tudo que Denis Courcy postou

  1. Corrija para: SELECT CODPRO, NOMPRO, COMPRADO, VENDIDO, (COMPRADO - VENDIDO) AS ESTOQUE FROM (SELECT prd.CODPRO, prd.NOMPRO, SUM(IF(comp.QTDE_COMPRADA IS NULL, 0, comp.QTDE_COMPRADA)) AS COMPRADO, SUM(IF(vds.QTDVEN IS NULL, 0, vds.QTDVEN)) AS VENDIDO FROM PRODUTOS prd LEFT JOIN COMPRAS comp ON comp.COD_PRODUTO = prd.CODPRO LEFT JOIN VENDAS vds ON vds.CODVEN = prd.CODPRO GROUP BY prd.CODPRO ) e;
  2. Tente assim: SELCT MAX(numero_linha) FROM relacao_atividade GROUP BY id_relatorio HAVING id_status = '1' AND (resp_1 = '1' OR resp_2 = '1' OR resp_3 = '1' OR resp_4 = '1') O filtro na cláusula HAVING é acionado APÓS o processamento do GROUP BY. O filtro na cláusula WHERE é acionado ANTES do processamento do GROUP BY.
  3. Boa noite. Você pode criar esta procedure DELIMITER $$ CREATE PROCEDURE `bd`.`exemplo`(IN variavel VARCHAR(100)) BEGIN SET @preparable_stmt = CONCAT("SELECT max(aging_liberacao) as aging_lib FROM bd.gd_ob WHERE projeto = '00003' AND mrp IN(", variavel, ")"); PREPARE stmt FROM @preparable_stmt; EXECUTE stmt; -- DEALLOCATE PREPARE stmt; END$$ DELIMITER ; e executá-la assim: CALL exemplo('"O08",'"OM2"');
  4. Denis Courcy

    Dúvida em regra

    Não. Faça assim: ALTER TABLE turma ADD UNIQUE KEY nomeDoIndice (idTurma, Horainicio, Curso_idCurso); Este índice impedirá que haja a duplicidade indesejada.
  5. O MySQL não permite este tipo de validação. A solução que adotei em meus sistemas foi realizar toda e qualquer gravação através de procedures, que podem retornar um result set de um select. Veja abaixo um exemplo: DELIMITER $$ USE `meudatabase`$$ DROP PROCEDURE IF EXISTS `exemplo_crud`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `exemplo_crud`(IN Acao CHAR(1), IN pidExemplo INTEGER, IN pnmExemplo VARCHAR(50), IN ptxExemplo DOUBLE(6,3), IN pvlMinimo DOUBLE(8,2), IN pndExemplo CHAR(1), IN pidDominioSituacao INTEGER) BEGIN DECLARE msg VARCHAR(1000) DEFAULT "sem mensagem"; DECLARE excecao SMALLINT DEFAULT ; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excecao = 1; IF pnmExemplo = "" OR (Acao <> "I" AND pidExemplo = ) THEN SET msg = "Erro na passagem de parametros"; ELSE START TRANSACTION; /*Inclusao */ IF Acao = "I" THEN INSERT INTO exemplo(nmExemplo, txExemplo, vlMinimo, ndExemplo, idDominioSituacao) VALUES (pnmExemplo, ptxExemplo, pvlMinimo, pndExemplo, pidDominioSituacao); IF excecao = 1 THEN SET msg = "MySQL: Erro ao inserir na tabela de exemplo"; ROLLBACK; END IF; END IF; IF excecao <> 1 THEN IF Acao <> "I" THEN SET @idExemplo = pidExemplo; END IF; /*Alteracao*/ IF Acao = "A" THEN UPDATE exemplo SET nmExemplo = pnmExemplo, txExemplo = ptxExemplo, vlMinimo = pvlMinimo, ndExemplo = pndExemplo, idDominioSituacao = pidDominioSituacao WHERE idExemplo = @idExemplo; IF excecao = 1 THEN SET msg = "MySQL: Erro ao atualizar exemplo"; ROLLBACK; END IF; END IF; END IF; /*Exclusao*/ IF excecao <> 1 THEN IF Acao = "E" THEN DELETE FROM exemplo WHERE idExemplo = @idExemplo; IF excecao = 1 THEN SET msg = "MySQL: Erro ao excluir exemplo"; ROLLBACK; END IF; END IF; END IF; /*Se tudo deu certo, então finaliza confirmando a gravacao.*/ IF excecao <> 1 THEN COMMIT; IF Acao = "I" THEN SET msg = "MySQL: Exemplo Incluido com sucesso"; ELSE IF Acao = "A" THEN SET msg = "MySQL: Exemplo Alterado com sucesso"; ELSE SET msg = "MySQL: Exemplo Excluido com sucesso"; END IF; END IF; END IF; END IF; SELECT msg AS msg; END$$ DELIMITER ;
  6. Denis Courcy

    Erro #1064

    Não foi possível ler a query que está na imagem. Poderia transcrevê-la(copiar e colar) aqui, por favor?
  7. Denis Courcy

    Dúvida em regra

    Segundo seu modelo, a criação de uma UNIQUE KEY, na tabela Turma, que contemple os campos idTurma, HoraInicio e Curso_IdCurso resolverá o problema.
  8. Tente assim: 1 - Pare o serviço do mysql 2 - Salve os arquivos em outra pasta (lembre-se de salvar o database de serviço: mysql; os arquivos ib_logfile0, ib_logfile1 e ibdata1) e o seus databases que dependendo da versão, estão na pasta C:\Documents and Settings\All Users\MySQL\data 3 - reinstale o mysql e reinicie o serviço 4 - teste se esta funcionando. 5 - se estiver funcionando pare o serviço do mysql 6 - copie os arquivos de volta 7 - reinicie o serviço
  9. No Delphi eu uso mysqldump --opt --flush-logs --triggers --port=3306 --user=root --result-file=backup.sql --databases "meuBancoDeDados" --result era uma recomendação da MySQLA/B para formação de nomes de backups em windows. (Diferente do > no linux). Para recuperação de backup eu uso o gerenciador de linha que trabalha no console do cmd em c:\ ou no diretório onde estiver meu backup, entro em mysql -u root -p no prompt mysql> eu digito source nomedomeubackup.sql digito enter e espero o termino saia com quit
  10. Ok. Corrija para : SELECT CODPRO, NOMPRO, COMPRADO, VENDIDO, (COMPRADO - VENDIDO) AS ESTOQUE FROM (SELECT prd.CODPRO, prd.NOMPRO, SUM(comp.QTDE_COMPRADA) AS COMPRADO, SUM(vds.QTDVEN) AS VENDIDO FROM PRODUTOS prd LEFT JOIN COMPRAS comp ON comp.COD_PRODUTO = prd.CODPRO LEFT JOIN VENDAS vds ON vds.CODVEN = prd.CODPRO GROUP BY prd.CODPRO ) e;
  11. Tenta assim: SELECT CODPRO, NOMPRO, COMPRADO, VENDIDO, (COMPRADO - VENDIDO) AS ESTOQUE FROM (SELECT prd.CODPRO, prd.NOMPRO, SUM(comp.QTDE_COMPRADA) AS COMPRADO, SUM(vds.QTDVEN) AS VENDIDO FROM PRODUTOS prd LEFT JOIN COMPRAS comp ON comp.COD_PRODUTO = prd.CODPRO LEFT JOIN VENDAS vds ON vds.CODVEN = prd.CODPRO ) e; depois faremos a segunda parte
  12. Faça assim: DROP INDEX nome_indice ON nome_tabela ou assim: ALTER TABLE nomeDaTabela DROP INDEX nome_indice
  13. Claro que é possível. Estude "Stored Procedures" e "Prepared Statements".
  14. Crie um usuário root@% e conceda a ele os direitos necessários. O @% indicará que o root está acima de qualquer IP. O melhor será você criar um usuário sistema@% para que seja acessado por seu sistema e não precise usar o root para isso.
  15. Tente assim: SELECT * FROM (SELECT * FROM tbVenda WHERE venData BETWEEN "2016-01-01 06:00:00" AND "2016-01-31 23:59:59") t1 WHERE TIME(tbVenda) BETWEEN "06:00:00" AND "16:00:00";
  16. Faça assim: UPDATE nomeDaTabela SET nomeDoCampo = REPLACE(TRIM(nomeDoCAMPO)," ", "_"); Onde: nomeDaTabela é o nome da tabela que você deseja alterar e nomeDoCampo é o nome do campo que contem o produto. Esta alteração afetará todos os registros da tabela.
  17. Tenta assim: SELECT tbc.codcongregacao, tbc.codigocongregacao, tbc.nomecongregacao, (SELECT SUM(mis.valormissoes) FROM tbcongregacao tbc1, tbmissoes mis WHERE tbc1.codcongregacao = '1' AND tbc1.codcongregacao = mis.codcongregacao AND mis.datamissoes BETWEEN '2016-02-01' AND '2016-02-2016') + (SELECT SUM(diz.valordizimo) FROM tbcongregacao tbc2, tbdizimo diz WHERE tbc2.codcongregacao = '1' AND tbc2.codcongregacao = diz.codcongregacao AND diz.mesdizimo BETWEEN '2016-02-01' AND '2016-02-2016') + (SELECT SUM(vot.valorvoto) FROM tbcongregacao tbc3, tabvotos vot WHERE tbc3.codcongregacao = '1' AND tbc3.codcongregacao = vot.codcongregacao AND vot.mesvoto BETWEEN '2016-02-01' AND '2016-02-2016') + (SELECT SUM(rec.valorreceita) FROM tbcongregacao tbc4, tabreceita rec WHERE tbc4.codcongregacao = '1' AND tbc4.codcongregacao = rec.codcongregacao AND rec.mesreceita BETWEEN '2016-02-01' AND '2016-02-2016') AS receitas, (SELECT SUM(des.valordespesas) FROM tbcongregacao tbc5, tbdespesas des WHERE tbc5.codcongregacao = '1' AND tbc5.codcongregacao = des.codcongregacao AND des.datadespesas BETWEEN '2016-02-01' AND '2016-02-2016') AS despesas FROM tbcongregacao tbc Existe forma mais inteligente de fazer isso. Mas seria necessário ver a estrutura e os dados para gerar.
  18. Vamos analisar um pouco. Primeiro modifique a cláusula where da forma WHERE month(v.dtvenda) = '2' and c.sr_deleted='' para WHERE v.dtvenda BETWEEN 2026-02-01 AND 2016-02-29 and c.sr_deleted='' Vai evitar que sua consulta entre em TABLE SCAN. Segundo, para efeito de teste, inclua o campo calculado qtRegistros, conforme abaixo: SELECT v.dtvenda, c.numnven, round(sum(c.quantid*c.prcompr),2) as COMPRAS, v.totalve as VENDAS from infvenda v, COUNT(v.dtvenda) AS qtRegistros Vai trazer a quantidade de registros somados para que você possa verificar se sua consulta está fazendo realmente o que você quer. Compare os qtRegistros do dia 23 com o select abaixo: SELECT v.dtvenda, c.numnven, round(c.quantid*c.prcompr,2) as COMPRAS, v.totalve as VENDAS from infvenda v JOIN nvendas c on (v.dtvenda = c.dtvenda and v.numnven = c.numnven) WHERE v.dtvenda = '2016-02-23' and c.sr_deleted=''
  19. Oi Eder, Uso windows 7. baixei de http://downloads.mysql.com/archives/community/
  20. Na tabela Generalizada Clientes coloque somente os atributos que são comuns aos dois tipos de especialização que você quer e mais um atributo que informará se a especialização é Pessoa Fisica e ou Juridica. (Vou chamar de indicadorDePessoa com domínio F ou J) Exemplo: idCliente, indicadorDePessoa, Nome, Endereço(se for um só), etc. Na tabela de especialização Pessoa Fisica coloque somente os atributos que são específicos desta especialização Exemlo: idCliente(FK com relação 1:1 para Cliente), CPF, Sexo, Identidade, etc Na tabela de especialização Pessoa Jurídica coloque somente os atributos que são específicos desta especialização Exemplo: idCliente(FK com relação 1:1 para Cliente), CNPJ, Nome Fantasia, InscEstadual, Etc. Quando você criar uma compra para um cliente específico o que vai entrar é o idCliente, que será a FK para a tabela de clientes. Informe se precisar mais.
  21. Publique, por favor, as estruturas das tabelas.
  22. Esta não é uma dúvida de MySQL. É de PHP. Movendo MySQL-->>PHP
  23. Denis Courcy

    Erro banco de dados

    Está informando não existe o campo CODIGO na tabela Qusuario em seu banco de dados.
  24. Esta sintaxe está errada. convert (varchar (8), @data, 112) Verifique o manual do mysql de sua versão para achar uma função mais apropriada.
  25. Faça o último. Os primeiros são para você saber como cheguei lá: -- listar datas que possuem mais de um evento por data SELECT DATE(e2.setup) AS `dtEvent` FROM eventassist.event e2 GROUP BY `dtEvent` HAVING COUNT(e2.event_id) > 1; -- Listar a informação dos eventos SELECT e1.setup, e1.event_id, e1.setup, e1.teardown, e1.event_type_id FROM eventassist.event e1; -- Listando o que voce quer: SELECT e1.setup, e1.event_id, e1.setup, e1.teardown, e1.event_type_id FROM eventassist.event e1 WHERE DATE(e1.setup) IN (SELECT DATE(e2.setup) AS `dtEvent` FROM eventassist.event e2 GROUP BY `dtEvent` HAVING COUNT(e2.event_id) > 1);
×
×
  • Criar Novo...