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. Oi, 'Total := QryHora.FieldByN' Você já leu sobre algorítimos de lista encadeada e lista duplamente encadeada? Sua solução, provavelmente, está neste algorítimo.
  2. Oi, 'zimmer' Ações possíveis em SQL. DELETE FROM nome-da-tabela = Exclusão de registros (linhas) da tabela INSERT INTO nome-da-tabela = Inclusão de registros (linhas) da tabela UPDATE nome-da-tabela = Alteração de atributos(campos/colunas) da tabela SELECT <nome-dos-atributos> FROM nome-da-tabela = Lê informações da tabela. Para maiores informações consulte o capítulo 6 do manual do MySQl versão 4.1 (tradução em português)
  3. Oi, 'Rogério Filho' ! Não sei o tamanho desta tabela "chat". Mas se for grande o impacto na ordenação poderá estar causando o erro que você relatou. Experimente criar um índice descendente por "cod" CREATE INDEX cod_inv ON chat (cod DESC) e force o uso do índice em seu sqlSELECT * FROM chat USE INDEX (cod_inv)") Experimente criar
  4. Oi, 'Leticia Carvalho' Crie uma tabela temporária (Física/Persistente) que contenha os mesmos atributos da planilha a ser exportada. Exporte de Excel para CSV e importe o CSV com LOAD DATA LOCAL INFILE para esta tabela. Depois, faça a movimentação para as demais tabelas usando INSERT INTO ... SELECT ... FROM tab_temporaria. Para mais detalhes sobre o uso destes comandos leia o manual do MySQL varsão 4.1 (tradução em português)
  5. Denis Courcy

    Tabelas FRM,MYD,MYI

    Oi, 'Audacter'! Você tem que instalar o MySQL. Apesar de ter os arquivos não há a certeza de que você consiga abri-los pois há a necessidade do banco MySQL reconhecer estas tabelas como sendo dele. Ver tópicos: Quero aprender, Sou novato na área, espero a ajuda de vocês ! Recuperar banco de dados pelo ibdata1 Diretorio Mysql, Não consigo acessar as pastas
  6. Denis Courcy

    Otimização tabela

    Oi, 't0th' Em nenhum dos casos usou indice para produtos e quem está afetando isto é o JOIN (parece normal). Tente mais uma vez assim EXPLAIN SELECT STRAIGHT_JOIN SQL_CACHE produtos.nome, produtos.preço, lojas.nome AS nomeLoja, site, produtos.id FROM produtos USE INDEX (prod_nome) INNER JOIN lojas ON lojas.id = produtos.lojas_id WHERE ((MATCH (produtos.nome) AGAINST ('+notebook' IN BOOLEAN MODE)) OR LOCATE('nb', produtos.nome) <> 0)AND lojas.publish =1 Se der certo retire o EXPLAIN do comando acima e veja em quanto tempo ele retorna o resultado. Outra coisa. Existe índice para lojas.publish ?
  7. Denis Courcy

    Otimização tabela

    Não. Somente acrescente mais este índice.
  8. Denis Courcy

    Otimização tabela

    Oi, 't0th' Já que você não pode fazer um ajuste mais refinado em ft_min_word_len, vamos ter que buscar de outra forma e tentar evitar um TABLE SCAN. Faça: CREATE INDEX prod_nome ON produtos (nome); Tente:EXPLAIN SELECT SQL_CACHE produtos.nome, produtos.preço, lojas.nome AS nomeLoja, site, produtos.id FROM produtos INNER JOIN lojas ON lojas.id = produtos.lojas_id WHERE (MATCH (produtos.nome) AGAINST ( '+notebook' IN BOOLEAN MODE) OR LOCATE('nb', produtos.nome) <> 0) AND lojas.publish =1 O explain serve para ver se a query está usando os indices. Se não estiver usando o indice prod_nome então force o uso dele conforme abaixo. EXPLAIN SELECT SQL_CACHE produtos.nome, produtos.preço, lojas.nome AS nomeLoja, site, produtos.id FROM produtos USE INDEX prod_nome INNER JOIN lojas ON lojas.id = produtos.lojas_id WHERE (MATCH (produtos.nome) AGAINST ( '+notebook' IN BOOLEAN MODE) OR LOCATE('nb', produtos.nome) <> 0) AND lojas.publish =1 Retire o explain, teste a saída, veja o resultado e reporte.
  9. Oi, 'Marcio Dias' Pode sim.Neste caso, @num deverá ser declarado dentro da função com o nome de "num" sem o "@"
  10. Denis Courcy

    Otimização tabela

    Oi, 't0th' Por que você não usa somente uma pesquisa em match? Veja o exemplo abaixo se funciona SELECT sql_cache produtos.nome,produtos.preço,lojas.nome as nomeLoja, site, produtos.id FROM produtos inner join lojas on lojas.id = produtos.lojas_id WHERE MATCH (produtos.nome) AGAINST ( CONCAT('+notebook', " ", '+nb ' IN BOOLEAN MODE)) and lojas.publish = 1Faça o teste e reporte o resultado.
  11. Oi, 'Spawnzao'! Vamos por parte pois as derivações PODEM ser muitas. (Podem não quer dizer que serão). Você disse: Vamos tratar destes dois problemas acima, em primeiro lugar. Primeiro problema: Arquivos de log binério mysql-bin.000001 mysql-bin.000002 mysql-bin.000003 São arquivos gerados pelo log de transação, do MySQL. Removê-los é ficar sem ter como restaurar dados entre um backup e outro. Removê-los da forma como você está fazendo é mais errado ainda, pois desestabilizará o servidor de banco. Os comandos corretos para remover o log binário são: RESET MASTER - para remover todos e PURGE MASTER LOGS - para remover apenas alguns arquivos. Este arquivo é gerado a cada vez que o comando flush -logs é acionado prlo mysqladmin, pelo comando FLUSH LOGS, a cada vez que o servidor é reiniciado e quando o log binário atinge o tamanho previsto em max_binlog_size. Você poder direcionar os arquivos do log binário para outro local. Disco, inclusive. (É o que eu faço e recomendo, pois se o disco principal quebrar eu posso restaurar minhas meus dados se o logbinário estiver em outro disco) Para direcionar o log binário para outro local altere a linha abaixo em seu my.cnflog-bin = /home/mysql/logs/mysql-bin.log Segundo problema: Corrompimento da tabela traffic. Este problema ocorre porque no restart do mysal os caches não estão sendo gravados (commited) no banco, deixando a tabela inconsistente. Certifique-se que o comando FLUSH TABLES está sendo executado antes de resetar o mysal.
  12. Denis Courcy

    Otimização tabela

    Oi, "melhorar sempre" é o lema. Mas é bom que você teste primeiro e veja os resultados. Não esqueça que palavras compostas dentro das variáveis "processador", "cpu" e "intel", ou seja as variáveis dentro dos MATCHES de fulltext deverão estar entre aspas ou você terá surpresas ingratas nas respostas. Por exemplo: buscar por denis courcy trará todos os elementos com denis e todos os elementos com courcy independente de serem a mesma pessoa ou não, mas buscar por "denis courcy" só trará os elementos que corresponderem a string desejada.
  13. Oi, 'Marcio Dias' O MySQL só permite executar SQL dinamicamente em STORAGE PROCEDURE. Poor isso modifiquei seu código para atender o que você quer. Veja abaixo: DELIMITER $$; DROP PROCEDURE IF EXISTS `meubanco`.`fcRetUltimoRegistro`$$ CREATE PROCEDURE `meubanco`.`fcRetUltimoRegistro` (campo char(30), tabela char(30), out i_ultimo integer ) BEGIN set @iSQL = concat("Select max(", campo, ") into @ultimo from ", tabela); prepare stmt from @iSQL; execute stmt; drop prepare stmt; set i_ultimo = (@ultimo + 1); END$$ DELIMITER;$$ Os testes foram baseados em minha tabela de testes chamada clientes. Veja abaixo a execução:select max(matricula ) from cliente; Retornou 323986. Executando sua procedure Call fcRetUltimoRegistro('matricula', 'cliente', @num); select @num;Retornou 323987.
  14. Oi, 'Webster'! Reveja sua estrutura de dados, pois segui o exemplo fornecido no primeiro post para te passar a instrução. Veja abaixo o que você passou no primeiro post deste tópico:
  15. Denis Courcy

    Otimização tabela

    Oi, 't0th' Os indices fulltext proporcionam buscas dinâmicas tais como as relaizadas pelo google. Veja o tópico abaixo e se você ainda tiver dúvidas não se acanhe em perguntar. (Resolvido) Pesquisa full text
  16. Denis Courcy

    Otimização tabela

    Oi, 't0th' Não havia a necessidade de passar todas as tabelas para MyISAM. somente a tabela de produtos. Ao passar uma tabela para MyIsam ela perde a integridade referencial pois o engine MyISAM ignora relacionamento pai/filho entre tabelas. Neste caso seu controle passa a ser por programação através de sua linguagem de programação normal e/ou trigger, storage procedure, etc. O campo nome da tabela produtos é o indicado para indice fulltext, pois no select que você passou este é o campo que recebe a carga do LIKE. Dica.: Em suas consultas sempre verifique se os atributos em uma condição WHERE possuem indices. É sempre interessante criar índices para estes campos para que as consultas sejam aceleradas. Tome o cuidado de não criar índices demais, pois eles podem degradar o sistema, tembém.
  17. Denis Courcy

    Otimização tabela

    Oi, 't0th'! Como você não respondeu até agora e para não deixar o povo sem saber qual é seu erro, aqui vai a dica. Passe a tabela produtos para o engine MyISAM e crie indices tipo FULLTEXT. Depois disso, elimine as pesquisas com LIKE, que são o maior atraso, pois provocam TABLE SCAN e põe abaixo toda a vantagem de usar indices..
  18. Denis Courcy

    Otimização tabela

    Oi, 't0th' Já sei onde está seu erro. Mas para não restar dúvidas, por favor envie todos os índices da tabela produtos, com seus respectivos atributos(campos). Envie, também, o engine das tabelas (MyISAM, InnoDB, etc)
  19. Oi, Anderson! convém que você estude sobre cursores e fetch em Storages procedures no MySQL. Oi, BRANCO_STYLE! Pesquisas através de cursores somente em storages procedures. se não for este o caso então é melhor que você controle através de índices únicos e /ou sua linguagem de programação. A procedure abaixo é um exemplo do uso de cursor. /* Procedure structure for procedure `inclui_em_teste1` */ drop procedure if exists `inclui_em_teste1`; DELIMITER $$; CREATE DEFINER=`root`@`localhost` PROCEDURE `inclui_em_teste1`() BEGIN DECLARE m_nome CHAR(60); DECLARE eof_teste INTEGER DEFAULT 0; /* cria a variavel que servirá de controle para EOF */ DECLARE cur_teste CURSOR FOR /* Cria o cursor que trabalhará o select */ SELECT nome FROM teste; DECLARE CONTINUE HANDLER FOR NOT FOUND SET eof_teste = 1; /* Cria a chave que verificará e mudará o valor da variavel de eof quando o select chegar ao final */ OPEN cur_teste; /* abre o select */ FETCH cur_teste INTO m_nome; /* Le a linha */ WHILE NOT m_eof DO START TRANSACTION; INSERT INTO teste1 (codigo, nome) VALUES ((SELECT (max(t1.codigo)+1) FROM teste1), m_nome); COMMIT; END WHILE; CLOSE cur_teste; /* fecha o select */ END$$ DELIMITER;$$
  20. Oi, 'CASSIOSSSS' O MySQL não permite que você execute outra instrução SQL na mesma tabela dentro de um TRIGGER. Se não for este o seu caso, dê nome certo as tabelas usadas no exemplo para que possamos analisar melhor.
  21. Denis Courcy

    conexao remota

    Oi, 'Mestre SAM' Leia este tutorial, presente no manual do MySQL. 3.1. Conectando e Desconectando do Servidor
  22. Oi, 'Wellington Magno' Sua pergunta não está relacionada diretamente com o banco MySQL, mas com algum erro de logiga no programa que você está usando. Movendo MySQl -->> PHP
  23. Denis Courcy

    Somar colunas

    Oi, 'Exacon' ! Se cove tem várias colunas e quer apresentar uma última coluna com um somatírio das colunas anteriores terá que fazer como abaixo: SELECT col1, col2, col3, (col1 + col2 + col3) AS Total FROM minhatabela Se você quer que o MySQl apresente como resultado, na última linha o total das somas das colunas, então você terá que usar a cláusula GROUP BY com uma variação chamada WITH ROLLUP. Exemplo:minhaTabela Col1 Col2 Arroz 5 Feijao 5 Arroz 4 Feijao 10 ExecutandoSELECT Col1, SUM(Col2) AS SOMA FROM minhaTabela GROUP BY Col1 WITH ROLLUP; Teremos:Col1 SOMA Arroz 9 Feijao 15 (NULL) 19
  24. Oi, 'unisov' Para saber se um valor está em um "array" (do jeito que você pensa) você pode usar a função FIELD_IN_SET. Veja abaixo: set @var="casa,hotel,pensao"; select @var; select find_in_set('hotel',@var); select find_in_set('hotel',"casa,hotel,pensao");Esta função retorna a posição do elemento no "array". No caso do exemplo, o número 2; Se o elemento pesquisado não existir, então retornará zero. Outra característica é que o "array" não pode começar com virgula. Para retornar um elemento, fornecendo a posição deste no array, você deverá escrever uma função UDF (uma codificação semelhante a uma storage procedure).
×
×
  • Criar Novo...