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. Qual o erro que está reportando? Pelo que vi se você retirar a cláusula VALUES o código funcionará. att Denis Courcy
  2. Denis Courcy

    Mysql

    Já coloquei. Veja backup no ítem acima usando mysqldump. att Denis Courcy
  3. Denis Courcy

    Mysql

    Então vamos a receita de bolo: Fazer backup do banco desejado: Utilize o utilitário do MySQL chamado mysqldump. (é um utilitáriode linha de comando) Se o seu banco está em linux mysqlsump -u {usuario} -p --opt {nome_do_banco} > arquivo_backup.sql Se o seu banco está no windows mysqlsump -u {usuario} -p --opt {nome_do_banco} --result-file=backup.sql Após ter feito o backup é hora de restaurar. ATENÇÂO: CUIDADO para que o nome do banco de dados que será restaurado não seja o mesmo nome de um banco já existente no destino. Execute o comando de linha chamando o mysql: mysql -u {usuario} -p No prompt do MySQL digite: mysql> Source backup.sql; ao término da restauração saia do mysql digitando: mysql> quit; é só. att Denis Courcy
  4. [Oi, '--neo_soro --'! Pelo que percebi seu problema não está no MySQL ou na escrita da sintaxe SQL, mas na forma como você escreveu seu código PHP (acho que é esta a linguagem que você está usando). Como não conheco a linguagem e este é um forum de MySQL, sugiro que você encaminhe este tópico ao fórum de PHP. att Denis Courcy
  5. Oi, Halfar! CADÊ a cláudula WHERE???? Select Ementa, Texto, Linkagem, Processo, Tribunal, ID, TipoNumero, Orgao, DataJulgamento, Data from DLJ WHERE REPLACE(REPLACE(TipoNumero,'.',''),'-','') LIKE '%5134657%' att Denis Courcy
  6. Denis Courcy

    Traduzir Para Mysql

    Oi, Rodrigo! Tente assim: UPDATE products_description PD SET PD.products_name = PD.products_name + ' - LOCAÇÃO ' WHERE PD.products_id IN (SELECT PC.products_id FROM products_to_categories PC INNER JOIN categories_description CD ON PC.categories_id = CD.categories_id WHERE CD.categories_id = 10 ) Att Denis Courcy
  7. Oi, Rômulo Uma solução para isto é colocar ambas as triggers como AFTER UPDATE. Assim, a trigger só será disparada se houver atualização na tabela. O motor do MySQL não faz atualização quando o novo dado é igual ao dado que já está gravado. Logo, a trigger não será disparada. Uma outra solução, que pode complementar a anterior é perguntar ao trigger de T1 que está disparando a atualização em T2 é se NEW.campo1 é diferente de OLD.campo no ato de invocar a atualização de T2. Se for diferente então houve atualização e o trigger será disparado. se não houve então o campo1 da tabela T1 não dfoi modificado e o trigger não será disparado para atualizar T2. Isto vale para T2 disparando atualização em T1, também) Espero ter sido claro. Se não fui exponha dúvidas e veremos o que fazer. Att Denis Courcy
  8. Oi, Maicon! Desenvolva seu algorítimo usando os seguintes comandos: var f: textfile; buffer: string; AssignFile(f, 'Lpt1'); {atribui ao handler f o indicador de opração do arquivo. Onde está Lpt1 (impressora) pode ser um arquivo ex.: c:\dados.txt} rewrite(f); {informa que o arquivo em questão será aberto apenas para escrita } writeln(f, buffer); {grava uma linha (conteudo da variavel buffer) no arquivo apontado acima} closefile(f); {fecha o arquivo} att Denis Courcy
  9. Denis Courcy

    Lock Tabela

    Oi, Marcos! Por padrão o engine InnoDB do MySQL, a partir da versão 4.1x, utiliza o bloqueio por registros no lugar de bloqueio por tabelas. Verifique o Manual do MySQL 4.1 para mais detalhes. Uma outra técnica que você poderia usar seria a criação de tabela semáforo que contivesse os campos usuário, tabela e registro. (Eu uso esta técnicaem diversas ocasiões inclusive para evitar que o mesmo usuário se logue em 2 ou mais máquinas simultaneamente) Esta técnica é descrita conforme o Caso de Uso abaixo: 1 - Usuário "A" seleciona o registro (vou usar seu exemplo) com o código 25 da tabela de estoque. 2 - Sistema insere um registro na tabela semáforo (usuario="A", tabela = "estoque", registro=25)Este procedimento informa que este registro está em processo de alteração. 3 - Usuário começa o processo de digitação e seu sistema vai armazenando isto em variáveis 4 - Usuário confirma a gravação 5 - Sistema dá START TRANSACTION faz as operações de gravação e encerra com COMMIT ou ROLLBACK 6 - Em ambos os casos COMMIT ou ROLLBACK sistema informa sucesso ou fracasso e libera o semáforo deletando o registro referente àquele usuário. 7 - Fim Caso de Uso Vantagens A qualquer momento seu banco de dados estará livre para consultas e gravações O registro estará bloqueado e acessível a consulta por outros usuários que saberão que na tabela "estoque" o registro com campo chave 25 está sendo atualizado pelo usuário "A" O tempo de gravação de registro independe do tempo do usuário, que pode ter ido ao banheiro, falar com o chefe ou atender telefone, por exemplo. Desvantagem Se o sistema cair por algum motivo o semáforo não será desarmado ficando marcado que está em uso. Neste caso, você deverá criar um algorítimo em que isto possa ser desfeito automaticamente, após algum tempo ou manualmente. Dica: NUNCA dê a chance para que o usuário trave o sistema e diga que o problema é seu. att Denis Courcy
  10. Denis Courcy

    Mysql

    Você criou um banco em um MySQL e está querendo passar para outro MySQL? Se é, entã utilize o mysqldump para descarregar seu banco em um arquivo de texto e, depois, utlize o comando de linha mysql para carregar o arquivo de texo em seu novo local. Se você criou o banco com outro SGBD então você deverá descarregá-lo em um arquivo de texto com a ferramenta de dump própria deste SGBD e carregá-lo no MySQL usando o comando de linha mysql. Passe mais informações para que possamos orientar melhor. att Denis Courcy
  11. Oi, Parenti! Faça assim: Listar Selecionados SELECT * FROM tb_cantor WHERE id_cantor IN (cantor1, cantor2, cantor3); O comando acima Selecionará os cantores cujo id_cantor estiver contido nas variáveis cantor1, cantor2 e cantor3 Da mesma forma, para excluir os cantores que estiverem contidos naquelas variáveis, então faça: DELETE FROM tb_cantor WHERE id_cantor IN (cantor1, cantor2, cantor3); Existe um problema que você deverá controlar. São as músicas cantadas por este(s) cantor(es) Que você deverá excluir, também. Para isto faça antes de excluir os cantores: DELETE FROM tb_musicas WHERE id_cantor IN (cantor1, cantor2, cantor3); Isto tudo se você seguiu o que sugeri no tópico anterior. att Denis Courcy
  12. Não entendi. Explique melhor o que você quer. att Denis Courcy
  13. Parenti Tenha atenção porque estes procedimentos são em cascata. falhou o primeiro não adianta continuar com o resto. por isso conserte o primeiro da seguinte forma: ALTER TABLE tb_cantor CHANGE id, id_cantor INT( 5 ) UNSIGNED NOT NULL e prossiga com os outros. Informe onde houver um próximo erro. att Denis Courcy
  14. Antes de tudo verifique se suas tabelas não estão corrompidas. leia o manual do mysql para isso. O básico que você precisa entender nos engines é: InnoDB = Tabela transacional, ou seja funciona dentro de transações e estas precisam ser completadas em sua totalidade para que haja integridade nas tabelas. Bom para ser usado se há grande entrada e saída de dados. MyISAM = Tabelas Não Transacionais, não há controle de integridade. Se houver uma falha na gravação dos dados então uma tabela pode ter os dados gravados e outra não. Exemplo pode haver item de nota fiscal sem haver a nota fiscal propriamente dita. Agora, Vamos tentar entender o que você fez: Antes de mais nada é EXTREMAMENTE RECOMENDÁVEL FAZER UM BACKUP de sua base de dados. Pois não me responsabilizarei por danos aos seus dados caso você opte por fazer as sugestões que coloco abaixo. Você criou uma tabela tb_cantor com um campo id de tamanho 5 do tipo int auto_increment. Isto quer dizer que o valor deste campo vai de 1 a 9999 pois o último byte significativo é usado para guardar o "sinal de número negativo" Se desejar aumentar o tamanho do campo sem utilizar mais espaço em disco para o valor para UNSIGNED. executando o comando: ALTER TABLE tb_cantor MODIFY id INT(5) UNSIGNED NOT NULL AUTO_INCREMENT; Porém para melhor identificar os atributos de cada tabela modifique o nome do campo id para id_cantor. então, fazendo os dois comandos simultaneamente, O narrado acima e este. ALTER TABLE tb_cantor CHANGE id, id_cantor INT(5) UNSIGNED NOT NULL AUTO_INCREMENT; Outra, ainda nesta tabela: Se seu campo `cat_cantor` é o que entendi, ou deja categoria do cantor, então é um campo descritivo que está se repetindo em toda a sua tabela causando uma perda de espaço e conseqüentemente uma possibilidade grande de erro na manutenção do cadastro. por exemplo poderia estar escrito ROCK em uma linha e Rock em outra linha, ou ainda, Rock and Roll em outra linha o que dificultaria a pesquisa: A sugestão é normalizar esta tabela criando uma nova tabela para armazenar estas categorias. se você desejar seguir esta sugestão, faça assim: 1 - Crie a tabela categoria: CREATE TABLE categoria ( id_categoria int(5) unsigned not null auto_increment, `cat_cantor` varchar(255) NOT NULL default '', PRIMARY KEY (id_categoria) ); 2 - Se a tabela tb_cantor tem muitos registros então deve-se crie um índice por cat_cantor CREATE INDEX cat_cantor_index ON tb_cantor (cat_cantor); 3 - Dê carga dos dados na tabela categoria seria assim: INSERT INTO categoria (cat_cantor) select cat_cantor from tb_cantor group by cat_cantor; 4 - modifique a tabela tb_cantor 4.1 - Inclua o campo id_categoria ALTER TABLE tb_cantor ADD COLUMN id_categoria int(5) unsigned not null default 0; 5 Dê carga no campo id_categoria da tabela tb_cantor UPDATE tb_cantor tbc set tbc.id_categoria = (select id_categoria from categoria cat where cat.cat_cantor = tbc.cat_cantor); 6 exclua o índice cat_cantor_index (se você o criou antes) DROP INDEX cat_cantor_index; 7 exclua o campo cat_cantor na tabela tb_cantor ALTER TABLE tb_cantor DROP COLUMN cat_cantor; 8 crie um indice por id_categoria para a tabela tb_cantor. Este servirá para estabelecer um relacionamento com a tabela categoria CREATE INDEX id_categoria_index ON tb_cantor (id_categoria) Pronto. Se você fez os passos acima, você criou um relacionamento de um para muitos entre categoria e cantores. Ou seja Uma categoria pode estar em vários cantores. Para você consultar a tabela cantor com a categoria deverá fazer assim: SELECT tbc.cantor, cat.cat_categoria from tb_cantor tbc INNER JOIN categoria cat ON cat.id_categoria = tbc.id_categoria A tabela tb_músicas pelo que entendo guarda as músicas cantadas pro determinado(s) cantor(es) então há um relacionamento de muitos para muitos entre musicas e cantores mas não vou entrar neste mérito agora. Vamos ficar na forma de um cantor para muitas musicas. Você falou que tem 200.000 registros nesta tabela e ela está pesada. então vamos cortar algumas gordurinhas. Se você inserir o campo id_cantor na tabela tb_musicas e remover o campo cantor (porque ele já está na tabela tb_cantor) você vai passar de (255 * 200000) bytes para (5 * 2000000) bytes, no seu pior caso, além de normalizar a tabela tb_musicas. Se você optar por fazer o que recomendo faça os passos abaixo: 1 criar um índice por cantor na tabela tb_musicas CREATE INDEX cantor_index ON tb_cantor (cantor); 2 Incluir o campo id_cantor na tabela tb_musicas ALTER TABLE tb_musicas ADD COLUMN id_cantor INT(5) UNSIGNED NOT NULL default 0; 3 carregar valores na coluna id_cantor da tabela tb_musicas UPDATE tb_musicas m SET m.id_cantor = (select c.id_cantor FROM tb_cantor c where c.cantor = m.cantor); 4 excluir o índice cantor_index DROP INDEX cantor_index; 5 Excluir o campo cantor da tabela tb_musicas ALTER TABE tb_musicas DROP COLUMN cantor; 6 Criar indice por id_cantor na tabela tb_musicas (para que possa ser estabelecido o relacionamento entre as tabelas. CREATE INDEX id_cantor_index ON tb_cantor (cantor); Pronto Agora, para consultar que cantor canta que musica faça assim: Select c.cantor, m.title, m.musica from tb_cantor c INNER JOIN tb_musicas m ON c.id_cantor = m.id_cantor De outra forma, se quero saber que música é cantada por que cantores, então tenho: Select m.title, c.cantor, m.musica from tb_cantor c INNER JOIN tb_musicas m ON c.id_cantor = m.id_cantor O INNER JOIN trará somente as linhas que existirem nas duas tabelas. Poderei, ainda buscar que músicas pertencem a que categoria. como não foi definido um id_categoria para a tabela tb_musicas temos que nos arranjar assim: SELECT c.cat_cantor, m.title FROM categoria c INNER JOIN tb_cantor tbc on tbc.id_categoria = c.id_categoria INNER JOIN tb_musicas m on tbc_id_cantor = m.id_cantor Leia tudo com atenção, mais uma vez verifique a integridade de suas tabelas MYISAM, FAÇA BACKUP e reporte dúvidas se houver mais. att Denis Courcy
  15. Respostas 1 - Não faz. O MySQL VÊ que você tem índice(s) para a tabela e ele usa este(s) índice(s) 2 - CREATE INDEX nome-do-indice ON nome-da-tabela (nome-do-campo1, nome-do-campo2, ...) 3 - Seria uma boa idéia. Perguntas: Suas tabelas estão íntegras? Como são os engines que você está usando (MyIsam ou InnoDB)? att Denis Courcy
  16. Denis Courcy

    Relatórios

    Você está falando de MySQL? Esclareça mais. Estude a cláusula GROUP BY que poderá te ajudar. att Denis courcy
  17. Indice se cria deste jeito: 1 - indice unico. Ou seja, o campo chamado nome-do-campo não poderá ter valores iguais na tabela nome-da-tabela. CREATE UNIQUE INDEX nome-do-indice ON nome-da-tabela (nome-do-campo) 2 - indice não único.Ou seja, o campo chamado nome-do-campo poderá ter valores repetidos na tabela nome-da-tabela. CREATE INDEX nome-do-indice ON nome-da-tabela (nome-do-campo) att Denis Courcy
  18. Oi, Parenti! Por acaso você tem índices para os campos cat_cantor e endereco ? Com bases grandes ganha-se muito no tempo de consultas se os campos que estão nas cláusulas WHERE forem indexados. Faça o teste de tempo. Observe em quanto tempo seu MySQL retorna a consulta sem o índice e emquanto tempo ele o fará com o índice. Sem índice o MySQL entra numa condição que chamamos de TABLE SCAN, ou seja vai procurar registro a registro até encontrar o que ele precisa. att Denis Courcy
  19. $sql = $sql . $condicao . " REPLACE(REPLACE(TipoNumero,'.',''),'-','') LIKE CONCAT('%', REPLACE(REPLACE(" + $xNumProcesso + ",'.',''),'-',''),'%') order by Data Desc"; Estava faltando o operador de concatenação para a formação da string que é a sua SQL Se não for o sinal de + substitua por outro usado na linguagem de programação que você está usando. att Denis Courcy
  20. Retire o sinal de "@". "@VARIAVEL" ele era somente uma demonstração. Fica assim: $sql = $sql . $condicao . " REPLACE(REPLACE(TipoNumero,'.',''),'-','') LIKE CONCAT('%', REPLACE(REPLACE($xNumProcesso,'.',''),'-',''),'%') order by Data Desc"; PS. Não conheço PHP ainda (se é que é esta a linguagem que você está usando). att Denis Courcy
  21. Então o que você tem que fazer é garantir que os dois lados da pesquisa estejam do mesmo jeito. Para isto será necessário incluir mais uma função chamada de concat. O uso desta função a direira da cláusula LIKE implica em não utilizar os apóstrofos como delimitadores para a referida cláusula. Ficará assim: Select REPLACE(REPLACE(TipoNumero,'.',''),'-','') LIKE CONCAT('%', REPLACE(REPLACE(@VARIAVEL,'.',''),'-',''),'%') order by Data Desc onde: @VARIAVEL é a sua variável. att Denis Courcy
  22. ALTER TABLE tabelaquejaexiste ADD COLUMN novocampo <tipo do campo> [NOT NULL [DEFAULT <valor default>]]; att Denis Courcy
  23. Oi, Rick0350! Faça um chinês de seu algorítimo. Pois se você já chegou a este ponto, você deve saber como é. Se não sabe fazer o chinês, então vou explicar abaixo como fazer um chines para um algorítimo que conta de 1 a 5. Dado o algorítimo: 1inicio algorítimo 2 x <- 1 3 Faça enquanto x < 5 4 x <- x + 1 5 fim faça enquanto 6fim algorítimo Avaliando o algorítimo (fazendo o chinês) 0 - Inicio o algorítimo 1 - (linha2)inicializo minha variavel com o valor 1 2 - (linha3)pergunto se o valor de x é menor que 5? a resposta é sim (o valor em x é 1) vou para a linha 4. 3 - (linha4) somo 1 ao valor contido em x (que agora passa a valer 2) e atribuo este novo valor a própria variável x 4 - (linha3)pergunto se o valor de x é menor que 5? a resposta é sim (o valor em x é 2) vou para a linha 4. 5 - (linha4) somo 1 ao valor contido em x (que agora passa a valer 3) e atribuo este novo valor a própria variável x 6 - (linha3)pergunto se o valor de x é menor que 5? a resposta é sim (o valor em x é 3) vou para a linha 4. 7 - (linha4) somo 1 ao valor contido em x (que agora passa a valer 4) e atribuo este novo valor a própria variável x 8 - (linha3)pergunto se o valor de x é menor que 5? a resposta é sim (o valor em x é 4) vou para a linha 4. 7 - (linha4) somo 1 ao valor contido em x (que agora passa a valer 5) e atribuo este novo valor a própria variável x 8 - (linha3)pergunto se o valor de x é menor que 5? a resposta é não (o valor em x é 5) vou para a linha 6. 9 - fim do algorítimo. Tente reproduzir esta lógica em seu exercício. Se houver dúvidas poste novamente. att Denis Courcy
  24. Denis Courcy

    Backup Em Mysql?

    Os dados vão depender da forma como você processou o dump. Basicamente são 3 formas de processar o dump. Estrutura e dados; somente estrutura; somente dados. Além disso, também você pode escolher se quer dump de todas as tabelas de um banco, de algumas tabelas de um banco, de todos os bancos do seu mysql Outra informação: Fazer backup no Windows é diferente de fazer backup para o Linux. Isto porque o windows utiliza os caracteres ascii 13 e 10, (/r/n respectivamente) para mudança de linha, enquanto o linux utiliza somente o caracter /n. O mysqldump provê uma opção especial que compatibiliza os dois dumps. Abaixo exibirei um exemplo que utilizo em meus backups. mysqldump --opt --triggers --port=3306 --user=root --result-file=backup.sql --databases meuBD Vamos a explicação --opt é o mesmo que informar as opções --quick, --add-drop-table, --add-locks, --extended-insert e --lock-tables (todas ao mesmo tempo). Fornece a descarga mais rápida para leitura em um servidor MySQL. --triggers Faz o Dump dos triggers de cada tabela. Esta opção foi adicionada no MySQL 5.0.11. Versões anteriores não fazem dump dos triggers. --port=3306 Número da porta para conexões TCP/IP. --user=root Executar o servidor mysqld como o usuário nome_usuário ou id_usário (numérica). --result-file=backup.sql Direcione a saída para um determinado arquivo. Esta opção deve ser usada no MSDOS porque previne a conversão de nova linha '\n' para '\n\r' (nova linha + retorno de carro). --databases meuBD informa que será tratado somente o banco de dados chamado meuDB para maiores informações execute mysqldump --help e leia os manuais do mysql. att Denis Courcy
  25. A pergunta inicial é: Que tipo de dado você utilizou para o seu campo hora em sua tabela tbl_Blog? String? Time? Outra pergunta. Por que você não utiliza a hora do próprio servidor para fazer o que deseja? Pois pelo que estou vendo você está utilizando a hora da máquina cliente. É isto? Se for, pense bem. pois a hora do servidor padroniza e controla melhor o histórico que você está querendo montar. Se você estiver usando a hora do servidor com o campo hora no formato date/time faça assim: Set rstINC = conn.execute("Insert Into tbl_Blog (hora) VALUES (Time())") att Denis Courcy
×
×
  • Criar Novo...