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. Denis Courcy

    Todos os ID's

    Oi 'Diego_DeDweb' Esclareça melhor o que você quer. Não entendi seu texto.
  2. O MySQl está te informando que você está tentando inserir um registro filho antes de inserir um registro pai. No seu caso, você está tentando gravar um registro em viagem sem que exista uma filial correspondente na tabela filial. Outra ação a ser tomada, alé da exposta acima, é verificar se na tabela filha o campo SQ_FILIAL possui valor default. (Precisa ter).
  3. Não faz. Já respondi algo parecido há alguns dias. O autoincrement retorna sempre o ultimo numero gerado por ele + 1. Este tipo de ação, que você quer fazer é irreal. Imagine se você possui 1.000.000 de registros em uma tabela e deleta o 2º registro. você teria que reorganizar todos os 999.998 registros restantes. Além de reorganizar todos os relacionamentos com todas as tabelas que usam atributo como foreign key.
  4. Denis Courcy

    Entendendo código.

    Forum errado. Movendo MySQL -->> PHP
  5. Segue abaixo um passo a passo de como obter o que você quer select SQL_CALC_FOUND_ROWS usuarioid from usuario limit 1; SET @variavel = (select found_rows()); select @variavel; -- retornou 86 em minha base de teste SET @um_terco = (@variavel DIV 3); select @um_terco; -- retornou 28 SET @dois_tercos = @variavel - @um_terco; select @dois_tercos; -- retornou 58 -- select usuarioid from usuario limit @um_terco, @dois_tercos; estalinha não poderá ser executada pelo MySQl. O LIMIT só trabalha com constante. select usuarioid from usuario limit 28, 58;
  6. Oi, 'NandoNL' A 1º opção é a mais inteligente. O MySQL administra este número com pé nas costas.
  7. Claro como água. Resposta: Não. Não há como ser automático e simples. O Mysql sempre irá utilizar o último valor do autoincrement +1.
  8. Oi, pessoal! A resposta acima está correta mas gerará table scan, pois para cada registro lido em clientes terá que fazer nova pesquisa em pedidos e verificar se i id não está na lista retornada. este tipo de ação poderá "sentar" a máquina. Uma maneira mais eficaz é a exibida abaixo: SELECT STRAIGHT_JOIN c.id_cliente FROM clientes c LEFT JOIN pedido p ON p.id_cliente = c.cid_cliente WHERE p.id_cliente IS NULL;
  9. A forma abaixo responde sua questão SELECT STRAIGHT_JOIN c.id_cliente FROM cliente c LEFT JOIN pedido p ON p.id_cliente = c.id_cliente WHERE p.id_cliente IS NULL;
  10. Oi, João! O meio mais seguro para fazer backup no MySQL é usando a ferramenta mysqldump.exe. A restauração é feita usando o comando SOURCE dentro do programa de linha de comando mysql.exe.
  11. Oi 'Tchello' Não há como determinar o "erro". Tente modificar seu código para ficar assim: if($dias < 91){ $sql = ("UPDATE cliente SET cli_perfil = 0 WHERE cli_id = '$cliente_cli_id'"); } if($dias > 90){ $sql = ("UPDATE cliente SET cli_perfil = 1 WHERE cli_id = '$cliente_cli_id'"); } $sql = mysql_query($sql) or die (mysql_error()); Não conheço a linguagem de programação que você usa. Verifique se o código está correto. O que eu fiz foi somente apresentar um conceito.
  12. Você pode usar a função CASTpara converter umtipo de dados em tempo de execução. Veja o manual do mysql da versão que você utiliza para mais detalhes. Há muito oriento que não sejam utilizados os tipos numeric e decimal. No lugar deles utilize sempre integer e double, respectivamente. Apartir daversão 5.x estes tipos de dados estão em desuso.
  13. Oi 'marcosfj1' Tente assim UPDATE minhatabela SET meucampo = REPLACE(meucampo, '&', 'e');
  14. Você tem certeza que fez o que eu orientei? A ordem das tabelas de seu post não está iguual a ordem das tabelas do meu post. No seu post está faltando a cláusula group by.
  15. 'Tchello' Não sei o que aconteceu aqui em seu código: HAVING MAX(a.ped_data), Fri Dec 17 11:09:53 2010 Que data é essa? Por que existe virgula após o MAX? Como não tenho todos os elementos para teste vou por tentativa e erro. Tente assim: SELECT STRAIGTH_JOIN DISTINCT a.ped_data, c.cli_razao, a.ped_total_pedido FROM cliente c INNER JOIN historico_rel b ON b.cliente_cli_id = c.cli_id INNER JOIN pedido a ON a.historico_rel_hir_id = b.hir_id WHERE c.cli_id = '2393' GROUP BY c.cli_razao HAVING MAX(a.ped_data)
  16. Oi T Você pode fazer como no exemplo abaixo: select cliente, dtvenda as `Data Ultima Venda` from Venda group by cliente having max(dtvenda) Não esqueça de ciar um índice por data da venda. A ausencia deste índice gerará um table scan que sentará seu MySQL server.
  17. Oi, 'Tchello' Não há função no MySQL que faça o que você quer. Mas você pode rodar uma query que gere o total e uma segunda query com esta formula: set @total = (select sum(quantidade) from teste); /* Cria a variável*/ select objetivo, sum(quantidade) as quantidade, ((sum(quantidade) / @total)*100) as `% do total` from teste group by objetivo with rollup;
  18. Oi, 'João Vitor', Procure usar os comandos do SQL padrão (ANSI 92), Vai tornar mais fácil seu aprendizado. Solução de seu enigma: SELECT A.TIPO , A.DESCRICAO, SUM(A.VALOR1+A.VALOR2) AS TOT, B.TIPO, B.DESCRICAO, B.VALOR FROM T1 A INNER JOIN T2 B ON A.TIPO = B.TIPO
  19. Este é o arquivo de indices da tabela wsa_acc_log. Solução 1: Dropar indices desta tabela e criá-los novamente. Solução 2: Reparar tabela. Use o aplicativo myisamchk.exe. (Ver instruções no manual do MySQL de sua versão)
  20. Oi 'Tchello', Se entendi direito sua dúvida, então é só acrescentar a cláusula WITH ROLLUP após a relação de atributos de seu GROUP BY, assim: SELECT b.usu_id, CASE WHEN a.hir_resultado = 0 then 'PEDIDO' WHEN a.hir_resultado = 1 then 'SEM PEDIDO' WHEN a.hir_resultado = 2 then 'PEDIDO DE TESTE' WHEN a.hir_resultado = 3 then 'COTAÇÃO' END as descricao, count(hir_id) as qtde, COUNT(DISTINCT a.hir_id) AS total FROM historico_rel a INNER JOIN usuario b on a.hir_usuario_representante = b.usu_id GROUP BY descricao WITH ROLLUP Ele vai acrescentar mais uma linha ao resultado de sua query contendo o total
  21. Oi 'btpedro', O assunto em referência não está ligado diretamente ao banco de dados MySQL. Moverei seu tópico para o forum apropriado. Movendo MySQL -->> PHP
  22. Oi João, Tente assim: SELECT REPLACE(REPLACE(tel, "(", ""), ")", "") FROM tabela;
  23. Oi Rodrigo, Como administrador de dados posso te tizer que você pode escolher os nomes de bancos, tabelas e atributos (campos), conforme desejar. O controle destes nomes, também chamados de metadados, é atribuído a um dicionário de dados e devem sempre ser documentados. Você pode escolher as formas de abreviação que desejar. Por exemplo, para nomes de atributos, eu uso ND, para indicador; DS, para descrição; NM, para nome; OBS, para observação; ID, para identificador (atributos que referenciam chaves primárias); CT, para codigo tipo; CD, para código; etc. Para nomes de tabelas uso RL (relacionamento), para tabelas que fazem base em relacionamentos muitos para muitos; CT para tabelas de domínio; etc. Eu possuo um dicionário de abreviações dentro do meu dicionário de dados. Enfim, há muitas técnicas que podem ser usadas. Você só não pode deixar de documentar caso opte por qualquer delas.
  24. Sim. O procedimento para isto é reparar as tabelas, caso o engine seja MyISAM. caso InnoDB, deve-se desativar e reativar o serviço do mysql para que ele acione sozinho o reparador de tabelas. Se persistir deve-se recuperar o backup e o log binário. Sim. você pode perder seus dados.
  25. Não. Lamento informar que seu banco está em crash. Leia sobre Prevenção de Desastres e Recuperação no manual do MySQL.
×
×
  • Criar Novo...