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, 'RSalvador', A criação de tabelas temporárias segue a sintaxe abaixo:CREATE TEMPORARY TABLE temp ( <sua definição de atributos e indices> )ENGINE= MEMORY; O engine Memory força a criação em memória se a quantidade de registros ultrapassar um limite previamente estabelecido pelo MySQL ele descarrega em disco. Usando seu exemplo, teremos:CREATE TEMPORARY TABLE temp SELECT * FROM clientes LEFT JOIN notafisc ON clientes.id= notafisc.id; Neste caso ele vai usar a definição de atributos retornados pelo * do relacionamento entre as duas tabelas. Se existir mesmo nome de campo em ambas as tebelas o MySQL retornará um erro ou criará um nome qualquer para representar o campo. Para evitar este erro use:CREATE TEMPORARY TABLE temp (campo1 <tipo-tamanho>, campo2 <tipo_tamanho>,..., campoN <tipo-tamanho>) SELECT campo1, campo2, ..., campoN FROM clientes LEFT JOIN notafisc ON clientes.id= notafisc.id;
  2. Oi, 'RSalvador'! Primeiro problema A solução é:SELECT * FROM clientes WHERE idcliente NOT IN (SELECT DISTINCT idcliente FROM notafisc); Segundo Problema Você esqueceu de separar os comandos CREATE TABLE e INSERT com ponto-e-virgula. Para que ao criar a tabela os dados fossem carregados automaticamente, você deveria usar conforme o exemplo abaixo(extraido do manual do MySQL)CREATE TABLE artists_and_works SELECT artist.name, COUNT(work.artist_id) AS number_of_works FROM artist LEFT JOIN work ON artist.id = work.artist_id GROUP BY artist.id; Terceiro Problema Você usou a comparação de forma errada. para comparar se uma variável é nula use IS NULL, conforme o exemplo abaixo:SELECT * FROM Temp WHERE nota IS NULL;
  3. Oi,'mauro_braga' Este não é um erro padrão do MySQL. Parece ser um erro de timeout de sua aplicação. Experimente exportar os dados do excel para txt e importar para o mysql usando o load data infile. Será muito rápido. Movendo MySQL-->> PHP
  4. Oi Andreia! Por padrão todos os arquivos tem um marcador de EOF. Parece que seu algorítimo não está lendo ou entendendo este marcador e o último registro (o registro além do último lido de seu arquivo) está inválido para o MySQL. Experimente criar uma tabela temporária com a seguinte estrutura: CREATE TEMPORARY TABLE temp ( ano char(4), mes char(2), codigo char(5), tipo_desconto char(13), valor char(4), antecipado char(4), pgto_antecipado char(4), saldo char(4) ) ENGINE = MEMORY; e dar uma carga nela assim:LOAD DATA INFILE 'arquivo.txt' INTO TABLE temp FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n''; Faça as mudanças para que ele aceite os números decimais, assim:UPDATE temp SET valor = replace(valor, ',', '.'), antecipado = replace(antecipado, ',', '.'), pgto_antecipado = replace(pgto_antecipado, ',', '.'), saldo = replace(saldo , ',', '.');Depois, é só dar carga na tabela correta e dropar a tabela temporária. P.S.: NÃO ESQUEÇA LINES TERMINATED BY '\n' é para arquivos texto que foram gerados no LINUX/UNIX. Se o arquivo TXT foi gerado no WINDOWS/DOS use LINES TERMINATED BY '\n'.
  5. Oi 'Andreia Regina' ! pelo que vi, e pode estar errado por ser uma cópia, está faltando o ponto-e-virgula no final da instrução insert; Verifique se o arquivo não possui caracteres estranhos ou falta sinalização entre uma instrução e outra. Este erro indica que algo foi escrito errado e o motor do MySQl não está conseguindo depurar.
  6. Oi, 'Frega' ! Verifique se este tópico responde sua questão: (Resolvido) Retornar Consulta na mesma linha, Pivot (com string) Se não, procure por PIVOT. Se não encontrar nada, tentaremos uma solução.
  7. Oi, 'Taichou' ! Desculpe pelo mico. Reli o manual e a conclusão é que não é possível dar qualquer comando (insert/update ou delete), para a mesma tabela, dentro da trigger que está sendo executada. Não é possível, também, chamar uma storage procedure ou função, que faça esta tarefa (insert/update ou delete para a mesma tabela), dentro da trigger. A solução é via programação. Após você commitar a transação, dê um update para atualizar os dados necessários.
  8. No caso do primeiro post, quando a trigger foi disparada ela tentou gravar a informação no registro atual (o novo registro), mas não soube como gravar a informação porque não havia indicação de que tipo de informação Nova (NEW) ou antiga (OLD) ele deveria usar. Um outro erro foi na forma de como você escreveu a lógica. Você mandou que ele atualizasse somente a linha nova que estava gravando. Sempre que for escrever uma trigger pense em como seriam as instruções se não houvesse trigger (se você tivesse que fazer na mão). A correto é: DELIMITER $$; CREATE TRIGGER testeref AFTER INSERT ON ator FOR EACH ROW BEGIN UPDATE ator SET IndicacaoOscar = IndicacaoOscar + 1 WHERE Idade > 40; END $$ DELIMITER;$$
  9. Oi, 'Taichou' Pode, por favor, explicar melhor sua idéia? Ainda não está claro como posso ajudá-lo.
  10. Este questionamento não se refere ao Banco de dados MySQL. Movendo MySQL -->> Corel Draw
  11. Este tópico não pertence a área de MySQL. Movendo MySQL -->> PHP
  12. Oi, 'Neemias' Leia este tópico: (Resolvido) Retornar Consulta na mesma linha, Pivot (com string)
  13. Use tabela temporária com engine memory. Não ocuparão espaço em disco e você pode dropá-las da memória ao final da execução da procedure. A sintaxe para criação deste tipo de tabela é: CREATE TEMPORARY TABLE <nome-da-tabela> ( <campo 1> <definicao de campo 1>, ... <campo n> <definicao de campo n>, primary key (<campo x>) )ENGINE MEMORY;
  14. Oi, 'Diogo de Freitas' A maneira mais eficiente, apesar de você não querer utilizá-la é guardar em uma tabela. Eu tenho diveras tabelas de domínios que guardam apenas o id e a descrição ou o nome. Tabelas que mantém de 2 a n registros (muitas não passando de 10 registros). Um exemplo clássico é a tabela de tipo_estado_civil com os domínos solteiro, casado, divorciado, separado, viuvo, etc. Outro exemplo é estados_brasileiros, e muitos mais.
  15. Oi, Diogo! O MySQL não tem o tipo Array(vetor). Você pode simular usando um varchar e procurando com a função substring. Não sei qual seu objetivo neste tipo de pesquisa, mas desaconselho o uso de array. Não é uma forma inteligente de guardar ou recuperar informações em bancos de dados.
  16. Oi, '*FIT*' A partir da versão 5.x, apesar de continuarem disponíveis para efeito de compatibilidade com versões anteriores, você não deverá utilizar os tipos NUMERIC e DECIMAL para representar os números inteiros e decimais, respectivamente. Use os tipos INTEGER (TINYINT, SMALLINT, INTEGER, INT, MEDIUMINT ou BIGINT) para representar os números inteiros e o tipo DOUBLE para representar os números decimais. Lembro que a separação das casas decimeis é no formato americano, ou seja, ponto no lugar de vírgula.
  17. Denis Courcy

    Quero aprender

    Oi, 'thedigu'! Legal você querer aprender a trabalhar com BD e principalmente a trabalhar com MySQL. Quando você instala o MySQL ele cria 3 bancos default. O Information_schema, o Mysql e o test. Não mexa nos 2 primeiros. Eles controlam os direitos de acesso, as procedures, funções, triggers, tabelas, índices, usuários e permissões de acesso ao banco. O melhor é que você crie um banco próprio para seus testes. Será necessário você baixar e instalar um gerenciador de banco de dados. O MySQL tem um muito bom e gratuíto, também. Você deverá aprender sobre modelagem de dados, normalização, relacionamentos e uso de índices para aumento de desempenho. A base da mecânca com bancos de dados está teoria de conjuntos aprendidas no 1º e 2º graus. É fácil. Não há o que desculpar. Estamos aqui para trocar informações. Pode perguntar a vontade.
  18. Oi, 'Diogo de Freitas' A tradução ds linha de erro, para aqueles que não sabem inglês, é: #2014 - Commands out of sync; you can't run this command now "Comando fora de sincronia; Você não pode executar este comando agora." Este erro acontece porque você está deixando uma área de memória em aberto. Você criou a procedure, o que fez com que o MySQL reservasse espaço de memória para o código a ser executado. Dentro do código você executou um select, cujo o retorno é sempre uma tabela temporária (O resultado de uma select é sempre uma tabela). Esta tabela ficou aberta e a procedure encerrou. Isto causou uma falha de sincronia. Dentro de uma procedure procure usar os comandos FETCH e CURSOR para controlar o resultado de um select. CURSOR serve para dar um nome interno tabela que será o resultado do select e deve ser usado para abrir, fechar e ponterar o select em um registro. FETCH é usado para ponterar (ler) um registro de cada vez. Você também pode usar o select retornando diretamente para uma variável, tal como abaixo: SET minhavariavel = SELECT DATABASE( );
  19. Não precisa agradecer. Compartilhar faz parte do ofício. como digo em minha assinatura: "A troca do conhecimento é a unica forma de expandirmos o mesmo". Quando pesquisar não esqueça o seguinte: Procurar por: Carlos Alberto trará todos os Calos e todos os Albertos. Para buscar somente os Carlos Alberto use entre aspas (Assim: "Carlos Alberto"). Tal como no Google.
  20. Oi, Levi_gns! Procurar palavras usando o operador LIKE, tal como o 'Bicicleta' disse no post anterior, é válido se sua tabela for pequena, pois as pesquisas efetuadas por este operador frequentemente se tornam TABLE SCAN, principalmenete da forma como foi colocada acima. Table Scan é um processo de varredura completa registro a registro de toda a tabela que ignora qualquer tipo de índice, tomando tempo e processamento de forma exponencial ao crescimento da tabela. Um outro problema com este tipo de pesquisa é que ele está restrito a um único campo. A solução é usar índices fulltext (os mesmo usados pelo google para pesquisa). Veja o manual do MySQL sobre índices fulltext: 6.8. Pesquisa Full-text no MySQL
  21. Oi, 'Rafael Rocha B.' A sintaxe para insert está descrita no manual do MySQL desta forma: INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] nome_tabela [(nome_coluna,...)] VALUES ((expressão | DEFAULT),...),(...),... [ ON DUPLICATE KEY UPDATE nome_coluna=expressão, ... ] or INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] nome_tabela [(nome_coluna,...)] SELECT ... or INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] nome_tabela SET nome_coluna=(expressão | DEFAULT), ... [ ON DUPLICATE KEY UPDATE nome_coluna=expressão, ... ] A primeira opção sua, definida abaixo, está correta.$sql "INSERT INTO inscritos (nome, endereco, telefone) VALUES ('$nome', '$endereco', '$telefone')"; Esta outra $sql "INSERT INTO inscritos (nome=$nome, endereco=$endereco, telefone=$telefone)"; Não existe. Você deverá usar como na 3a. opção. e ficaria assim:INSERT INTO inscritos SET nome=$nome, endereco=$endereco, telefone=$telefone; Para mais detalhes, leia o manual do MySQL de sua versão.
  22. Oi 'Antonio Maucyr Pasqualli F' Você já viu esta ferramenta?http://www.spectralcore.com/fullconvert//t...CFQRM5QodPlGrPA Eu, particularmente, não conheço nenhuma ferramenta para fazer esta conversão com segurança e de forma automática, mas procure na net por Firebird to MySQL que você achará algumas para testar.
  23. Oi, 'tiago31' ! Qual é o problema?
  24. Denis Courcy

    Preciso de subquery?

    Oi, 'marvi' Pelo que entendi seria uma busca do tipo google correto? Se sim, use um índice do tipo FULLTEX e coloque os dois campos no índice. Para saber mais leia o manual de sua versão e poste aqui o que você não entendeu.
×
×
  • Criar Novo...