-
Total de itens
3.089 -
Registro em
-
Última visita
Tudo que Denis Courcy postou
-
Ok. Mas pense em uma solução melhor na organização de seu BD, pois este modo que fizemos tem um problema de performance que crescerá conforme crescer sua base de dados. Pois para a montagem da tabela temporária há a necessidade de varrer as outras duas tabelas. att Denis Courcy
-
Substituição De Acentos Por Simbolos..porque?
pergunta respondeu ao viejoyo de Denis Courcy em MySQL
Istoáconteceu porque você (ou alguém) não prestou atenção no conjunto de caracteres "CHARACTER SET" que estava formatado o banco. Então o Banco pegou um conjunto default e... Pronto caca feita! Busque mais informações no manual do MySQL 4.1 (versão em português Capítulo 9) a mesma se aplica a verão 5.0.x att Denis Courcy -
Oi, Fernando, O erro retornado está relacionado ao uso de um select dentro do IF. O select externo não está endendendo estes dois outros selects dentro no lugar onde deveria haver somente o(s) atributo(s) da(s) tabela(s). Sua solução passa por uma tebela temporária, já que o UNION também não se aplicaria a este caso. As seguintes instruções devem ser seguidas na ordem abaixo: CREATE TEMPORARY TABLE tmp SELECT CodCliFornec, RazaoSocial FROM PA0022; INSERT INTO tmp SELECT CodCliFornec, RazaoSocial FROM PA0042; SELECT DATE_FORMAT(DtMovimento, '%d/%m/%y') DATA, CodOperacao 'T.O.', NDocumento NF, Transacao TR, M.CodCliFornec 'CLI/FORN', tmp.RazaoSocial 'RAZAO SOCIAL', FORMAT(preço,2) preço, FORMAT(CtMedPonderado,2) 'C.M.P.', FORMAT(QtMovimentada,3) QTD, FORMAT(Saldo,3) SALDO FROM PA0111 M INNER JOIN TMP ON TMP.CodCliFornec = M.CodCliFornec WHERE Codigo = '$codigo' AND `NLocal` = '$local'; DROP TABLE tmp; Se não entender informe que explico melhor. att Denis Courcy
-
Eu uso o ERWin. Usei o DBDesigner e, quando notei este problema na simbologia voltei para o ERWin. Recentemente baixei os fontes do DBDesigner, mas ainda não tive tempo de estudá-lo. A vantagem do ERWin é poder criar modelos Lógicos e físicos em um mesmo projeto, além de poder separá-los em subject-areas. att Denis Courcy
-
Relacionamentos N:N são fáceis de serem feitos. Basta criar uma tabela intermediária que conterá os campos chave das outras duas tabelas. Fazendo com que esta vire 1:N e N:1. Exemplo Imagine uma tabela "Paciente", e uma tabela "Convenios". Com chaves primárias "idPaciente" e "idConvenio", respectivamente. Então, um paciente pode ter muitos convênios e um convênio pode estar em muitos pacientes. Deverá ser criada uma terceira tabela, que chameremos neste exemplo "Rl_Paciente_Convenio" e esta tabela conterá os atributos (campos) "idPaciente" e "idConvenio". esta tabela estabelecerá uma relação conforme abaixo: "Paciente" 1:N "Relacionamento_Paciente_Convenio" N:1 "Convenios". Agora, para saber que convenios pertencem a que pacientes, basta executar uma select deste jeito: SELECT c.NomeConvenio, p.NomePaciente FROM Convenios INNER JOIN Rl_Paciente_Convenio rl ON c.idConvenio = rl.idConvenio LEFT JOIN Paciente p ON p.idPaciente = rl.idPaciente As avariações de código e pesquisa vão depender dos questionamentos que você fizer ao modelo de dados. att Denis Courcy
-
Não Há restrição no MySQL. Relacionamentos, tais como informados acima são, por definição, ilógicos, já que a tabela "pai" não conteria registros a serem relacionados com a tabela filha. Então a pergunta, Relacionar o quê? Com quem? Um outro tipo de relacionamento que nos faz pensar se estamos fazendo algo errado é o relacionamento 1:1, quando tanto na tabela "pai" quanto na tabela "filha" é obrigatória a existência da chave (atributo, campo) de relacionamento. Relacionamento deste tipo só é logico se na tabela "filha" puder conter 0 ou 1 registro com a chave a se relacionar com a tabela pai. att Denis Courcy P.S. Se quiser saber mais sobre relacionamentos, continue perguntando. :D
-
Preciso De Ajuda Para Solucionar Um Algoritomo...me Ajuuuda!
uma questão respondeu Denis Courcy em Lógica de Programação
Se você não explicar exatamento o que necessita não tem como ajudar. att Denis Courcy -
Como Limpar Todo O Banco De Dados?
pergunta respondeu ao Alexandre Shammass de Denis Courcy em MySQL
A maneira mais fácil que conheço segue quatro passos passos. 1 - Faça um dump somente da estrutura do banco usando o mysqldump 2 - verifique se o arquivo gerado está correto 2.1 - Se estiver correto 2.1.1 - dê um drop no banco 2.1.2 - recarregue a estrutura e pronto. 2.2 - se não estiver correto volte ao passo 1. 3 - pronto. banco vazio. att Denis Courcy -
Valeu! Gostei da resposta de seu amigo. Tão óbvio que chega a dar raiva de não ter pensado nisso antes. Um Abraço Denis Courcy
-
Explique melhor. Que tipo de erro é reportado? att Denis Courcy
-
Fácil. Use assim. SELECT al.nome FROM aluno al WHERE al.cod_aluno <> (SELECT alu.cod_aluno FROM aluno alu LEFT JOIN relevendo rl ON al.cod_aluno = rl.cod_aluno) att Denis Courcy Desculpe cometi uns errinhos no post anterior. O código correto é: SELECT al.nome FROM aluno al WHERE al.cod_aluno <> (SELECT alu.cod_aluno FROM aluno alu LEFT JOIN relevendo rel ON alu.cod_aluno = rel.cod_aluno) E, se retornar linhas duplicadas utilize a cláusula DISTINCT no SELECT da sub query. Exemplo: SELECT al.nome FROM aluno al WHERE al.cod_aluno <> (SELECT DISTINCT alu.cod_aluno FROM aluno alu LEFT JOIN relevendo rel ON alu.cod_aluno = rel.cod_aluno) att Denis Courcy
-
Eric, tente modelar seu banco de dados de acordo com as formas normais. Evite misturar as coisas. Mas, respondendo sua pergunta, tem sim. são chamados campos estrutrados. exemplo Dada uma tabela cujo campo1 seja uma string com o seguinte conteúdo: '0001/2007-10-22'. Voce pode obter uma ordenação pela data usando a função SUBSTRING. Veja no manual do MySQL 4.1 em português capítulo 6, maiores detalhes (senão fica fácil demais e você não estuda). Um abraço Denis Courcy
-
Sim. Se data é o nome do campo, então ao passar 'data' você estava informando que ele deveria ordenar por uma string cujo conteúdo é 'data' e não pelo campo DATA que é o nome do campo de sua tabela. Entendeu? att Denis Courcy
-
Campos data, por default, no MySQL são armazenados na forma 'AAAA-MM-DD'. Você usou alguma formatação especial? Para guardar só o ano um campo numérico seria melhor. att Denis Courcy Sim, Correto. Você estará forçando a ordenação ascendente. att Denis Courcy
-
No exemplo abaixo o campo 1 estará ordenado em forma ascendente automaticamente. Select campo1, campo2, campo3 from minha tabela order by campo1; No exemplo abaixo o campo 1 estará ordenado em forma decrecendente. Select campo1, campo2, campo3 from minha tabela order by campo1 desc; No exemplo abaixo o campo 1 estará ordenado em forma decrecendente e o campo2 estará ordenado de forma ascendente. Select campo1, campo2, campo3 from minha tabela order by campo1 desc, campo2 asc; Como você pode ver a ordenação ascendente é default a variação para ascendente e decrescente pode ser obtida pelo uso dos sufixos asc e desc respectivamente att Denis courcy
-
Ontem, no final do dia, comentei que colocaria aqui no forum uma função que realiza busca por fonemas. Esta função foi traduzida do delphi (e melhorada) de uma edição da revista ClubeDelphi. Ela permite que se busque variações de um mesmo nome, talcomo FELIPE, FILIPE, PHILIP, etc. Os fonemas aqui descritos são diferentes dos fonemas da função SOUNDEX (nativa do MySQL), isto porque a função SOUNDEX utiliza fonemas oriundos do Inglês e nesta função usamos fonemas do portugûes (Brasil). O ideal é incluir um campo tipo varchar(25) (com indice para este campo) na tabela onde as pesquisas serão mais constantes. Na inclusão Carrege o campo com CodFonPT_BR(@nome) e na pesquisa utilize na cláusula WHERE campo = CodFonPT_BR(@nome) Por possuir duas aplicações (diferentes, escritas com linguagens) que buscam informações no mesmo banco obtive vantagem de colocar em um só lugar fazer a manutenção do que é comum aos dois sistemas. Espero que gostem. att Denis Courcy. PS. A Listagem da função está logo abaixo: DELIMITER $$; DROP FUNCTION IF EXISTS `MEUBANCO`.`CodFonPT_BR`$$ CREATE DEFINER=`root`@`localhost` FUNCTION `CodFonPT_BR`(nome char(50)) RETURNS char(50) CHARSET latin1 BEGIN declare novo char(50); declare auxiliar char(50); declare aux char(1); declare aux_ant char(1); declare aux_pos char(1); declare x int default 0; declare y int default 0; set novo = ''; set auxiliar = ''; set nome = UCase(nome); /*Tira acentos e cedilha*/ set x = 1; while x <= Length(nome) do set aux = substring(nome, x, 1); if aux in ('Á', 'À', 'Â', 'Ä', 'Ã') then set aux = 'A'; elseif aux in ('É', 'È', 'Ê', 'Ë') then set aux = 'E'; elseif aux in ('Í', 'Ì', 'Î', 'Ï') then set aux = 'I'; elseif aux in ('Ó', 'Ò', 'Ô', 'Ö', 'Õ') then set aux = 'O'; elseif aux in ('Ú', 'Ù', 'Û', 'Ü') then set aux = 'U'; elseif aux = 'Ç' then set aux = 'C'; elseif aux = 'não' then set aux = 'N'; elseif aux = ' ' then set y = 1; elseif Ord(aux) > 127 then set aux = char(32); end if; if y = 1 and aux <> ' ' then set auxiliar = concat(auxiliar, ' ', aux); set y = 0; else set auxiliar = concat(auxiliar, aux); end if; set x = x + 1; end while; /* Retira E, DA, DAS, DE, DI, DO, DOS do nome. Exemplo: Jos? da Silva = Jose Silva; Jo?o Costa e Silva = Joao Costa Silva */ set x = instr(auxiliar, ' DA '); while x > 0 do set auxiliar = concat(substring(auxiliar, 1, x), substring(auxiliar, x + 4, 50)); set x = instr(auxiliar, ' DA '); end while; set x = instr(auxiliar, ' DAS '); while x > 0 do set auxiliar = concat(substring(auxiliar, 1, x), substring(auxiliar, x + 5, 50)); set x = instr(auxiliar, ' DAS '); end while; set x = instr(auxiliar, ' DE '); while x > 0 do set auxiliar = concat(substring(auxiliar, 1, x), substring(auxiliar, x + 4, 50)); set x = instr(auxiliar, ' DE '); end while; set x = instr(auxiliar, ' DI '); while x > 0 do set auxiliar = concat(substring(auxiliar, 1, x), substring(auxiliar, x + 4, 50)); set x = instr(auxiliar, ' DI '); end while; set x = instr(auxiliar, ' DO '); while x > 0 do set auxiliar = concat(substring(auxiliar, 1, x), substring(auxiliar, x + 4, 50)); set x = instr(auxiliar, ' DO '); end while; set x = instr(auxiliar, ' DOS '); while x > 0 do set auxiliar = concat(substring(auxiliar, 1, x), substring(auxiliar, x + 5, 50)); set x = instr(auxiliar, ' DOS '); end while; set x = instr(auxiliar, ' E '); while x > 0 do set auxiliar = concat(substring(auxiliar, 1, x), substring(auxiliar, x + 3, 50)); set x = instr(auxiliar, ' E '); end while; /* Retira letras duplicadas. Exemplo Elizabette = Elizabete */ set x = 1; while x < length(auxiliar) do set aux = substring(auxiliar, x, 1); set aux_pos = substring(auxiliar, x + 1, 1); if aux = aux_pos then set auxiliar = concat(substring(auxiliar,1, x),substring(auxiliar,x + 2, 50)); end if; set x = x + 1; end while; set x = 1; while x <= length(auxiliar) do if x > 1 then set aux_ant = substring(auxiliar, x - 1, 1); else set aux_ant = ''; end if; if x < length(auxiliar) then set aux_pos = substring(auxiliar, x + 1, 1); else set aux_pos = ''; end if; set aux = substring(auxiliar, x, 1); /* 'A','E','I','O','U','Y','H' e espaços - ignora */ case when aux in ('B','D','F','J','K','L','M','N','R','T','V','X') then set novo = concat(novo, aux); when aux = 'C' then if aux_pos = 'H' then /*CH = X*/ set novo = concat(novo, 'X'); elseif aux_pos in ('A', 'E', 'O', 'U') then /* Carol = Karol */ set novo = concat(novo, 'K'); else /*Celina = Selina, Cintia = Sintia*/ set novo = concat(novo, 'S'); end if; when aux = 'G' then /* Geferson = Jeferson */ if aux_pos in ('E', 'I') then set novo = concat(novo, 'J'); else set novo = concat(novo, 'G'); end if; when aux = 'P' then /*Phelipe = Felipe*/ if aux_pos = 'H' then set novo = concat(novo, 'F'); else set novo = concat(novo, 'P'); end if; when aux = 'Q' then /* Keila = Queila */ if aux_pos = 'U' then set novo = concat(novo, 'K'); else set novo = concat(novo, 'Q'); end if; when aux = 'S' then if aux_pos = 'H' then /*SH = X*/ set novo = concat(novo, 'X'); elseif aux_pos in ('A','E','I','O','U') then /*S entre duas vogais = Z*/ if aux_ant in ('A','E','I','O','U') then set novo = concat(novo, 'Z'); else set novo = concat(novo, 'S'); end if; end if; when aux = 'W' then /* Walter = Valter */ set novo = concat(novo, 'V'); when aux = 'Z' then /*no final do nome tem som de 'S' -> Luiz = Luis */ if (x = length(auxiliar)) or (aux_pos = ' ') then set novo = concat(novo, 'S'); else set novo = concat(novo, 'Z'); end if; else if x = 1 then if aux ='Y' then /* Ivan = Yvan*/ set novo = concat(novo, 'I'); elseif aux = 'H' then /*Heber = Eber */ set novo = concat(novo, aux_pos); else /* primeira letra igual a 'A','E','I','O' ou 'U' */ set novo = concat(novo, aux); end if; end if; end case; set x = x + 1; end while; return novo; END$$ DELIMITER;$$
-
Consulta Complicadissima ! Ajuda Dos Experts Em Comparação De Linh
uma questão respondeu Denis Courcy em MySQL
Faça assim: [qoute] SELECT Planta, Variedade, COUNT(CONCAT(campo1, campo2, ... campoN)) as Coincidencias FROM TABELA GROUP BY Planta, Variedade;[/qoute] -
Fileage: Como Saber A Data Da Ultima Gravacao Em Uma Tabela?
pergunta respondeu ao paulobergo de Denis Courcy em MySQL
-
Então seria att Denis Courcy
-
Tente assim: att Denis Courcy
-
Este é um caso para uso da função SOUNDEX(str) Sua pesquisa ficaria assim: Francamente eu não gosto muito desta função pois o padrão fonético dela é o inglês. Recentemente eu li uma revista sobre delphi que trazia um código com padrão fontético em português. Em virtude de ter sistemas em plantaformas diferentes que acessam o mesmo banco, resolvi transcrever o código para uma função em MySQL. Se eu lembrar (e espero que sim) posto a função na íntegra amanhã. att Denis Courcy
-
Oi, Spyker! Vamos por parte e de trás para diante. 1- COULD NOT START THE SERVICE MYSQL5. ERROR:0 O MySQL está informando que já possui um serviço instalado na máquina windows. Você provavelmente deve ter desinstalado e reinstalado o MySQL. Solução: a- Desinstale o MySQL, b- Vá ao painel de controle, clique em Ferramentas administrativas, Serviços e verifique como foi cadastrado o serviço do MySQL. Se você fez a instalação padrão o nome do serviço será MySQL. c- Remova o Serviço. Utilize o utilitário SC do Win XP para remover o serviço clique em iniciar, executar, digite cmd, na tela do DOS, digite SC DELETE MySQL d- Reinstale o MySQL. 2- Informando ao MySQL que o padrão de tabelas será InnoDB a- Ececute MySQL Administrator. clique em Service Control. Na aba Configure Service, Habilite Support for Innodb. Clique em Apply Changes b- Clique em Startup Variables, Habilite Activate Innodb, clique em Apply Changes. c- Clique em File close para fechar o MySQL Administrator. 3-porque pelo que li somente ela da suporte a FK ( esta correta essa afirmação? ) Respoata: Sim. Está correta essa informação. att Denis Courcy
-
Verifique se os campos utilizados nas cláusulas ON que estabelecem os joins, estão indexados. A matemárica é simples. Pois quando não indexados eles tem que fazer um TABLE SCAN (pesquisa completa com varredura registro a registro em toda(as) a(s) tabela(s)) nas tabelas do(s) relacionamento(s). E isto degrada a performance em forma exponencial. Exemplo: Tendo 3 tabelas, A, B e C. Se cada uma possuir 1000 registros, a pesquisa sem indice fará uma busca de A x B x C, ou seja 1.000.000.000 de pesquisas para encontrar o que você deseja, mesmo se o que você deseja esteja apenas na primeira linha de cada tabela. att Denis Courcy
-
Tente assim: $qr = "SELECT * FROM relatorios WHERE nomes LIKE '%" .$busca. "%' AND DATE(date) BETWEEN '".$date1."' AND '".$date2."'"; Além disso a busca com LIKE da maneira que você está utilizando faz com que o MySQL utilize um TABLE SCAN, ou seja uma varredura em todos os regiastros da tabela em busca do valor que você deseja. Isto não é problema se você tem uma tabela pequena. Mas o problema crescerá exponencialmente a medida que a tabela for crescendo em quantidade de registros. Tente utilizar o LIKE somente para os caracteres iniciais de sua pesquisa. Além de indexar o campo nomes. att Denis Courcy Tente assim: $qr = "SELECT * FROM relatorios WHERE nomes LIKE '%" .$busca. "%' AND DATE(date) BETWEEN '".$date1."' AND '".$date2."'"; Além disso a busca com LIKE da maneira que você está utilizando faz com que o MySQL utilize um TABLE SCAN, ou seja uma varredura em todos os regiastros da tabela em busca do valor que você deseja. Isto não é problema se você tem uma tabela pequena. Mas o problema crescerá exponencialmente a medida que a tabela for crescendo em quantidade de registros. Tente utilizar o LIKE somente para os caracteres iniciais de sua pesquisa. Além de indexar o campo nomes. att Denis Courcy
-
Oi, João Paulo! As datas no MySQL são guardadas na forma de string 'aaaa-mm-dd', porém são tratadas como datas. se você for comparar uma data em uma variável sua com uma data guardada no banco de dados esta comparação poderá ser frita na forma de uma string como explicado acima. Obs.: Não há erro em seu comando sql desta vez. att Denis Courcy