-
Total de itens
3.089 -
Registro em
-
Última visita
Tudo que Denis Courcy postou
-
Oi, Valdilei! Simplesmente acrescente a cláusula ORDER BY após a linha do JOIN. Deste jeito: SELECT t1.id, t2.id FROM tabela1 t1 INNER JOIN tabela2 t2 ON t1.a1=t2.a1 and t1.a2=t2.a2 and t1.a3=t2.a3 and t1.a4=t2.a4 ORDER BY t2.id
-
Pedro, Não fiz teste ainda. Voce já ordenou assim? SELECT TotalScore, TotalGrade, COUNT(TotalGrade) AS count FROM game WHERE TotalGrade <= -2 GROUP BY TotalGrade ORDER BY TotalGrade ASC, TotalScore DESC
-
Oi, Pedro! Por restrições de acesso, não consigo ver a foto que você enviou. Pode remetê-la para processos4@capemi.com.br, por favor?
-
Olá todos que leem este post Este alerta é para informar que as modificações aqui citadas valem para este usuário Modificar o arquivo my.cnf sem o devido conhecimento do que estão fazendo pode provocar danos não intencionais. Oi, Pedro! Para realizar as otimizações você deverá seguir estes passos: 1. parar o servidor mysql o comando para isso é: (através de linha de comando) shell> mysql.server stop 2. fazer cópia do my.cnf 3. editar arquivo my.cnf para que o conteúdo fique como o abaixo: [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 # Nossas modificações inicializam aqui query_cache_type=1 # Ativa o query cache no MySQL 4.x. # Armazena todos os resultados, exceto SELECT no cache. query_cache_limit=1M query_cache_size=32M max_connections=100 # É o valor default. Vamos permanecer com este valor, por enquanto, porque você não tem memória suficiente para mais conexões. # memory = key_buffer + (sort_buffer_size + read_buffer_size)* max_connections # Que é agora: 8 + (20 + 0,25) * 100 = 233 MB # max_connections = aprox. MaxClients setting in httpd.conf file interactive_timeout=100 #wait_timeout=28800 # Valor de wait_timeout reduzido para prevenir que idle de clientes segurem conexões. wait_timeout=15 connect_timeout=10 # table_cache=64 # Verifique sempre a variavel opened_tables e ajuste table_cache após executar por algum tempo. table_cache=1024 #tmp_table_size=32M by default #thread_cache=128 # Valor de thread_cache reduzido para prevenir consumo indevido de memória (memory hogging). thread_cache=32 # key_buffer=258M # Reduzido key_buffer para verificar o tamanho dos arquivos de índice *.MYI files. key_buffer=8M # Comentados os buffers para manter o default. # sort_buffer_size=2M by default. # read_buf fer_size=128K by default. # read_rnd_buffer_size=256K by default. # myisam_sort_buffer_size=8M by default. # thread_concurrency O valor deve ser 2 * (no. de CPUs) thread_concurrency=2 # Habitei o log de slow queries. Para verificar quais queries estão tomando mais de 2 segundos. # As tabelas que aparecerem no arquivo mysqld.slow.log necessitarão de melhorias. log_slow_queries=/var/log/mysqld.slow.log long_query_time=2 [mysql.server] user=mysql basedir=/var/lib [client] socket=/path/to/mysql.sock 4. reinicializar o server mysql o comando para isso é: (através de linha de comando) shell> mysql.server stop 5. Coloque em uso para teste e informe qualquer variação positiva ou negativa, pois só tenho .
-
Oi, Mauro, Sua resposta é simples. A cláusula ORDER BY deve ser depois da cláusula WHERE. Assim, sua consulta deveria ser parecida com esta abaixo. SELECT * FROM cliente WHERE nome_cliente LIKE "%suapesquisa%" ORDER BY nome_cliente ATENÇÂO: Esta é uma pesquisa que firará mais lenta a medida que a tabela crescer em volume (quantidade de registros), pois sempre será feita por TABLE SCAN, ou seja, (nunca utilizará índices) sempre fará varredura em toda a tabela para encontrar o nome desejado. Mesmo que você tenha criado íncice pelo atributo nome_cliente. Para evitar isto faça a pesquisa por WHERE nome_cliente LIKE "%suapesquisa". Sem o % na última posição.
-
Oi, Valdilei! Não. Veja resposta completa abaixo Neste caso o select é um pouco diferente. Ele usará um INNER JOIN e será assim: Supondo que a estrutura da tabela1 seja igual a tabela2 mas os registros estejam em ordem diferente. tal como abaixo Nota a tabela2 já foi mencionada no post anterior. Tabela1 id a1 a2 a3 1 bb dd dd 2 aa be ch 3 aa aa aa 4 bb da dd 5 xx be aa SELECT t1.id, t2.id FROM tabela1 t1 INNER JOIN tabela2 t2 ON t1.a1=t2.a1 and t1.a2=t2.a2 and t1.a3=t2.a3 and t1.a4=t2.a4 O retorno seria assim: t1.id t2.id 1 2 1 5 2 1 3 3 5 4
-
Nill, 1. Que tipo de engine você está usando? InnoDB ou MyISAM? O motivo desta pergunta é que no engine MyISAM não há controle de integridade referencial por parte do banco de dados. Você pode, por exemplo excluir o pedido de vendas, por exemplo sem excluir os ítens do pedido de vendas. Deixando-os órfãos, isto é sem nenhuma referência para poder achá-los novamente. No caso de MyISAM, ainda, o controle de integridade referencial deverá ser feito por você através da linguagem de programação que você usa. O engine InnoDB, por outro lado, e, se montado corretamente, impedirá que situações como as que mencionei acima ou que a que você está passando, ocorra. Á vantagem do engine MyISAM sobre o engine InnoDB é a velocidade de acesso. 2. Resposta: SIM. É através deste id_cliente gravado na tabela tbl_pesqsat que você encontrará a referência ao registro contido na tabela tbl_clientes.
-
Oi, Nill! Já que você está em fase de aprendizado, vamos melhorar um pouco a sua metodologia. adote como regra que os nomes de atributos(campos) são únicos e devem se referenciar sempre a uma única idéia. Por exemplo, nas tabelas tbl_clientes e tbl_pesqsat os atributosid que você criou possuem o mesmo nome porém com idéias (semânticas) diferentes já que um guarda o id do cliente e o outro guarda o id do pesqsat. O ideal, neste caso é atribuir um nome que seja único e represente a semântica correta. Troque os nomes do atributosid na tabela tbl_clientes para id_cliente. Troque, também, o nome do atributo id na tabela tbl_pesqsat para id_pesqsat. Parece besteira ma isto o ajudará muito quando você trabalhar com bancos que contenham muitas tabelas. Seguindo a idéia acima, troque o nome do atributo tbl_clientes_id na tabela tbl_pesqsat para id_cliente. Observe que a semantica e o nome do atributo foram preservados. Quando se vê o nome do atributo sabe-se imediatamente do que se trata. Agora, respondendo sua pergunta. Não há nada errado com seu cadastro. Você provavelmente não criou a integridade referencial que o impediria de cadastrar um id_cliente (já assumi que você trocou o nome dos atributos) na tabela tbl_pesqsat antes de você cadastrá-lo na tabela tbl_clientes. Então o banco aceitou, sem questionar, o que você mandou fazer. Outro ponto que podemos citar aqui é que quando você informou tbl_clientes_id INTEGER UNSIGNED NOT NULL na criação da tabela tbl_pesqsat você não informou o valor default para este atributo, então o MySQL assumiu que o valor dele será ZERO. Todas as vezes que você cadastrar algo em tbl_pesqsat e não informar o valor de id_cliente, e não existir a integridade referencial, então id_cliente será preenchido com ZERO.
-
Oi Valdinei! A idéia é esta: Tabela2 id a1 a2 a3 1 aa be ch 2 bb dd dd 3 aa aa aa 4 xx be aa 5 bb dd dd SELECT * FROM Tabela2 WHERE a1 = (SELECT a1 FROM tabela2 GROUP BY a1, a2, a3 HAVING COUNT(id) > 1 ) Linhas retornadas Tabela2 id a1 a2 a3 2 bb dd dd 5 bb dd dd Acrescente os campos conicidentes na cláusula GROUP BY
-
Oi, Pedro! Esta sua pergunta foge do meu escopo. Você pode abrir um tópico sobre este questionamento, na área de linux aqui do fórum e eles poderão te auxiliar melhor.
-
Oi, Micheus! Valeu pela dica. Oi, Maicon! O que você precisa é estudar sobre indices full-text. Clique no link e leia o artigo Getting-Started-With-MySQLs-Full-Text-Search-Capabilities. Depois, se ainda houver dúvidas, post novamente. Um abraço
-
Oi, Pedro! Continuando a avaliação do post #7 3. As variaveis Handler_read_rnd (com 54213) e Handler_read_rnd_next (com 19424448) confirmam o que perguntei sobre índices no post #2 item 4. Valores altos nestas váriáveis indicam que as consultas estão sendo executadas com table scan (sem uso de índices, ou seja está fazendo varredura em toda a tabela para encontrar o desejado) Você precisa indexar várias de suas tabelas para melhorar as queries executadas. Se você desejar, pode passar as queries que eu te informo onde criar os índices. 4. O mais importante o cálculo abaixo mostra a quantidade de memória disponível necessária para operar o mysql com sua configuração atual: MySQL_MEMORIA_USADA = key_buffer_size + max_connections * (join_buffer_size + read_buffer_size + sort_buffer_size + thread_stack + tmp_table_size) 8388600 + 100 * (131072 + 131072 + 2097144 + 196608 + 33554432) = 8388700 * 36110328 = 280MB aproximadamente. No post #5 item 1 falei que seu problema é falta de memória RAM. Aqui está a explicação. Você necessita ter, no mínimo, 280MB e possui apenas 18MB. Mesmo se contasse com o cache atual 220MB + o buffer 3,4 MB daria 241MB. Mas este buffer e este cache serão usados também pelo SO Linux. O que mostra que você precisa, com urgência, aumentar a memória desta máquina. 5. Não adianta fazer mais otimizações que estas já descritas se você não aumentar a quantidade de memória RAM.
-
Oi, Maicon! Poderia melhorar sua pergunta, por favor. Ainda não entendi o que você quer.
-
Pedro, O comando show variables que você passou não contempla as variáveis abaixo porque seu BD não está em "movimento", ou seja ninguém está acessando. Voce poderia, por favor enviar-me o valor de SHOW STATUS Tal como SHOW VARIABLES este comando me auxiliará a te ajudar. CREATED_TMP_DISK_TABLES CREATED_TMP_TABLES CREATED_TMP_FILES HANDLER_READ_RND HANDLER_READ_RND_NEXT KEY_READS KEY_RADREQUEST OPEN_TABLES OPENED_TABLES
-
Oi, Pedro! 1. Variáveis faltando impossibilitaram uma melhor análise da performance. Quando você me informou o valor das variáveis você o fez completo, ou seja, não esqueceu de nenhuma? O servidor estava sendo acessado por outras pessoas no momento em que você comandou o show variables? A pergunta se dá em razão de algumas variáveis importantes não terem aparecido. Tais como: CREATED_TMP_DISK_TABLES CREATED_TMP_TABLES CREATED_TMP_FILES HANDLER_READ_RND HANDLER_READ_RND_NEXT KEY_READS KEY_RADREQUEST OPEN_TABLES OPENED_TABLES 2. A variável WAIT_TIMEOUT está com um valor muito alto. 28800 (segundos) no seu caso. Esta variável é a responsável por informar o tempo que os processos podem ficar em sleeping. Um tempo grande nesta variável mantém clientes segurando conexões e bloqueando o acesso de outros que queiram conectar para realizar realmente seus trabalhos. Um tempo bom para esta variável é de 15 (segundos). Ao reduzir o valor de WAIT_TIMEOUT você deverá aumentar o valor da variável MAX_CONNECTIONS de 100 (seu caso) para 300. Deve aumentar, também, o valor de THREAD_CACHE_SIZE (no seu caso está 0) para 5 (porque você tem pouca memória). O ideal é THREAD_CACHE_SIZE = MAX_CONNECTIONS + 1. THREAD_CACHE_SIZE é responsável por manter em memória as trheads para reutilização. Por favor me envie os valores das variáveis acima citadas para que eu possa completar a análise.
-
Este pode ser o seu grande problema. Pois a velocidade de acesso está diretamente ligado a processador e disponibilidade de memória RAM As tabelas do Mysql trabalham normalmente em dois tipos de engine. Um rápido, porém não permite o controle de constraints (integridade referencial) MyISAM. Outro, um pouco mais lento, e dependendo fica muito lento, que permite o controle de integridade InnoDB. Há outros menos usados e que também influenciam na velocidade de acesso dos dados no servidor. Não foi isso que perguntei. Tabelas sem indices operam por table scan e demoram muito a retornar os valores desejados. Principalmente se a concorrencia de memória for grande e houver muitos GROUP BY, ORDER BY e JOINS. O que eu preciso são as variáveis que te passei. use o utilitário de linha de comando do mysql chamado mysql. digite shell> mysql -r root -p o mysql vai pedir para você colocar a senha de acesso. se tudo ocorreu dentro do esperado um prompt como abaixo vai aparecer: mysql > digite mysql >show variables; uma lista com as variaveis e seu conteudo vais aparecer no monitor. não lembro se você pode redirecionar a saida para um arquivo. tente. para encerrar o mysql digite mysql >quit; Envie-me o arquivo dcourcy@gmail.com 1 não pare o servidor. você pode copiar o arquivo. ele é usado somente na carga do servidor. Ou seja, quando este inicializa o serviço. 2 não vou ensiná-lo agora a desativar o servidor. mais tarde, se houver necessidade, sim. 3 Isto é o que eu quero medir. as variáveis que passei funcionam como parâmetros e nos auxiliarão na configuração do servidor MySQL. Estou encerrando às 17:00 (GMT -3) amanhã continuamos.
-
Oi, Pedro! Elenquei alguns fatores para iniciarmos nossa pesquisa. 1 - Sua RAM está com 512Mb e compartilhando?. Experimente aumentar. Para o MySQL quanto mais memória melhor. 2 - Quantos acessos você tem por dia? 3 - Que tipo de engine você está usando? MyISAM, InnoDB, ...? 4 - Você indexou corretamente suas consultas? Há indices nas ligações de JOIN e nos campos de cláusula WHERE? 5 - Você poderia me passar o arquivo my.cnf para que eu possa estudá-lo? Gostaria de ver os valores dos seguintes parâmetros: max_connections wait_timeout thread_cache_size table_cache key_buffer_size query_cache_size tmp_table_size Open_tables Opened_tables Key_read_requests Key_reads Threads_created Handler_read_rnd Handler_read_rnd_next //Estes aqui abaixo são somente se você usa muitas tabelas em memória tmp_table_size Created_tmp_disk_tables Created_tmp_tables Created_tmp_files Você pode usar o comando show variables para me informar o valor destes parâmetros.
-
Verifique se este manual pode te ajudar. Consegui com um amigo que trabalha com este banco. dpspr.pdf
-
alguém me dá umas luzes acerca de bases de dados?
pergunta respondeu ao Diogo Freitas de Denis Courcy em MySQL
Não tem jeito de aprender a programar se você não tiver as duas visões. Código e Visual. Você pode associar o útil ao agradável no que diz respeito a WEB para você. Aconsehlo que você dê uma chegada no fórum de PHP, aqui no Script Brasil e se intere um pouco mais. Quando suas dúvidas vierem ao encontro do Banco de dados, especialmente o MySQL, retorne a este fórum e estaremos prontos a auxiliá-lo. -
(Resolvido) Conseguir valor da diferença entre datas
pergunta respondeu ao K!ko de Denis Courcy em Delphi, Kylix
A diferença entre uma data e outra é em dias e funciona assim: data_final - Data_atual = dias_de_diferença. Especifique melhor sua pergunta se isto não te atender. -
Explicando um modelo fácil Além de sua tabela de login crie uma tabela de perfil de acesso. Nesta nova tabela coloque os campos: idperfil numerico nomeperfil caracter ... os demais campos serão tipo booleanos e cada campo será o nome de um item do seu menu. Crie um cadastro para perfil de acesso. No cadastro de login coloque um campo para receber que tipo de perfil de acesso o usuário terá e, No login, propriamente dito, pesquise o perfil de acesso habilitando e desabilitando os menus daquele perfil daquele usuário. É só.
-
alguém me dá umas luzes acerca de bases de dados?
pergunta respondeu ao Diogo Freitas de Denis Courcy em MySQL
Que tipo de linguagem de programação voce usa? -
Oi, LuizCarlos A linha 005, PLACA MAE, 002 de seu exemplo deveria estar como 005, PLACA MAE, 001 para a rotina funcionar, conforme seu relato em Este tipo de pesquisa é conhecido como explosão de materiais e é feito da seguinte maneira, conforme a tabela que você apresentou. SELECT * FROM Tabela1 WHERE pr_pai IN (SELECT Tabela1.pr_codigo FROM Tabela1 WHERE Tabela1.pr_pai = 1); Neste caso a constante 1 em "WHERE Tabela1.pr_pai = 1" pode ser uma variável e representa o atributo pr_codigo onde este é igual ao atributo pr_pai. Ou seja, aquele que dá origem a pesquisa. "No seu caso (computador)".
-
Oi, Amauri! Utilize o utilitario do mysql chamado mysqldump. É, em minha opinião, a ferramenta mais confiável para fazer backup. Em SO Windows utilize assim: mysqldump --opt --flush-logs --triggers --port=3306 --user=root --result-file=backup.sql --databases nomedomeubancodedados Em SO Linux utilize assim mysqldump --opt --flush-logs --triggers --port=3306 --user=root --databases nomedomeubancodedados > backup.sql A explicação do que faz cada um dos parâmetros está no manual do mysql. Que aconselho ter como livro de cabeceira. A restauração do backup, se faz, usando o comando de linha mysql, da seguinte maneira: Em ambos SO Windows e Linux mysql -u root -p O utilitario vai pedir senha para entrada no banco. se não pedir é porque você não cadastrou. Uma vez aceito será exibido um prompt como abaixo: mysql > Digite: mysql > source backup.sql É só.
-
Estou transferindo este post para a área de delphi. O pessoal de lá poderá te auxiliar melhor.