-
Total de itens
3.089 -
Registro em
-
Última visita
Posts postados por Denis Courcy
-
-
SO QUE ESSE SELECT SO ME RETORNO UM MALDITO ERRO DE SINTAXE :
"#1064 - Você tem um erro de sintaxe no seu SQL próximo a 'SELECT RazaoSocial FROM PA0042 WHERE Codigo = M.CodCliFornec)) CLI-FORN, FO"
alguém PODERIA DAR UMA FORCINHA AI ???
E SERA QUE DESSA FORMA É A MELHOR TAMBEM não é? ...
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
-
a minha pergunta...se refere ao seguinte...
por exemplo em ferramentas do tipo Erwin, SA, etc...existe a possibilidade de indicar no modelo (através de simbologia a seguinte situação) 1:N ....pode ser muitas vezes 1:0...isto é, não é necessário que eu tenha sempre no N algum registro referenciado do 1...não sei se fui clara...exemplo: eu tenho uma tabela Funcionário que pode ter 1 ou muitos ou nenhum Dependente (tabela Dependente)...este nenhum tem como indicar na ferramenta? Pergunto isto, porque em literaturas comuns de Modelagem de Banco existe esta possibilidade...e alguns alunos me questionaram quanto a isto...
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
-
meu problema é o seguinte, eu posso ter várias pessoas em várias tramitações fica uma relação de N p/ N
por não ter aprendido não sei como fazer essa relação de N p/ N alguém saberia me explicar e/ou me mostrar na prática como fazer isso?
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
-
Oi,
Alguém sabe o porque de não existir relacionamentos do tipo 0:N, 0:1....no DBDesigner?
É alguma restrição do MySQL?
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
-
Prezados amigos, preciso de ajuda para fazer este exercício,
tenho que entregá-lo dia 30/10 e ando com muita dificuldade
para fazê-lo.
Preciso da colaboração de vocês.
Obrigada pela compreensão de todos!
Se você não explicar exatamento o que necessita não tem como ajudar.
att
Denis Courcy
-
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
-
Olá Denis,
Obrigado pela ajuda mas ainda não deu certo. Já havia tentado essa sintaxe mas não foi... O erro ocorre no segundo select.
Obrigado!
Explique melhor. Que tipo de erro é reportado?
att
Denis Courcy
-
Fácil. Use assim.Minha dúvida é como fazer uma consulta para localizar todos os alunos que não possuem código cadastrado na tabela relevendo.A consulta que verifica o aluno que tem codigo cadastrado na tabela relevendo eu fiz de boa.
SELECT al.nome FROM aluno al, relevendo rl WHERE al.cod_aluno=rl.cod_aluno
Grato!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
-
Seguinte pessoal, vamos imaginar q eu tenha um campo do meu db composto por numero/data
dentro de 1 só campo..
teria como ordenar meus resultados
pelo data q está dentro do campo depois da barra ou so criando outro campo?
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
-
usei sim! só ano.
daí o que acontece.
-> select * from tabela order by 'data' asc; incorreto
-> select * from tabela order by data asc; correto
a '' não ordenava corretamente gostaria de entender o porque... saberia me explicar?
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
-
tentei "select * from tp_legislativa order by 'data' asc ;"
mas não deu certo. meu campo data é date - YYYY (só guarda ano)
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
select * from tabela order by data asc; correto?Sim, Correto. Você estará forçando a ordenação ascendente.
att Denis Courcy
-
como faço pra ordernar em ordem crecente ou decrecente?
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;$$
-
Faça assim:
[qoute]
SELECT Planta, Variedade, COUNT(CONCAT(campo1, campo2, ... campoN)) as Coincidencias
FROM TABELA
GROUP BY Planta, Variedade;[/qoute]
-
Tem alguma função que retorne qual a data da criação ou ultima modificação (inclusão, exclusão ou alteração) de dados em uma tabela?
NÃO. A técnica para isto é criar um campo dtat_ult_ateracao, tipo TIMESTAMP NOT NULL
O Mysql colocará automaticamente, neste campo, a data e a hora da ultima atualização do registro.
Observe o trecho do manual do MySQL Versão 5.0 em Inglês
If a DEFAULT value is specified for the first TIMESTAMP column in a table, it is not ignored.
The default can be CURRENT_TIMESTAMP or a constant date and time value.
• DEFAULT NULL is the same as DEFAULT CURRENT_TIMESTAMP for the first TIMESTAMP
column. For any other TIMESTAMP column, DEFAULT NULL is treated as DEFAULT 0.
att
Denis Courcy
-
Denis, assim não funcionará também, pois esses codigos 1 e 2 são apenas exemplos que eu dei.... os codigos checados poderiam ser 1 e 3 ....no caso se eu usasse o between o 2 apareceria também...
Então seria
SELECT hoteis.nome AS hotelnome FROM hoteis, hoteis_tipo WHERE hoteis_tipo.cod_tipo IN (1,3,5,etc.);att
Denis Courcy
-
"SELECT hoteis.nome AS hotelnome FROM hoteis, hoteis_tipo WHERE hoteis_tipo.cod_tipo = 1 AND hoteis_tipo.cod_tipo = 2"
Tente assim:
SELECT hoteis.nome AS hotelnome FROM hoteis, hoteis_tipo WHERE hoteis_tipo.cod_tipo BETWEEN 1 AND 2att Denis Courcy
-
Este é um caso para uso da função SOUNDEX(str)coloquei o % porque podem aparecer 'o', 'ó', 'ô' e no meu caso também '?' . mas quando uso o % não acha registro algum, porém, quando uso 'o', acha registros com 'o', 'ó' e 'ô', mas não encontra '?' . estou usando o caracter errado?!Fonte Manual MySQL 4.1 Versão em portugês:Retorna uma string 'soundex' de str. Duas strings que parecidas fonéticamentea devem ter
strings 'soundex' iguais. Uma string soundex padrão possui 4 caracteres, mas a função SOUNDEX()
retorna uma string de tamanho arbitrário. Você posde usar SUBSTRING() no resultado
para obter uma string 'soundex' padrão. Todos os caracteres não alfanuméricos são ignorados na
string dada. Todas caracteres internacionais fora da faixa A-Z são tratados como vogais:
Sua pesquisa ficaria assim:
SELECT * FROM `contacts` WHERE Soundex(UCASE(`first_name`)) = Soundex('MARCO ANTONIO')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
-
Galera instalei o MySql 5 na minha maquina (win xp) e estou tentando instalar uma instancia do server com a engiene InnoDB, porque pelo que li somente ela da suporte a FK ( esta correta essa afirmação? ). Instalei o server mas quando fui criar o banco vi que o mesmo era do tipo myisam. Tentei atraves do mysqladmin, modificar a opção para Innodb porem não obtive sucesso. Fui no mysql server instance configuration para tentar alterar a configuração e segui os seguintes passos: reconfigure instance, detailed configuration, developer machine, multifuncional database, escolhi o drive para instalacao dos arquivos para o InnoDB, decision support(DSS), habilitei tcp/ip networking e strict mode, standard character set, não marquei include bin directory, informei a senha, executei e mesmo assim da erro... COULD NOT START THE SERVICE MYSQL5. ERROR:0
Sera que alguém poderia me ajudar com este problema? Desde já agradeço a ajuda!
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
-
opa, vlw
eu fiz o teste estático assim e funcionou..
$qr = "SELECT * FROM relatorios WHERE nomes LIKE '%".$busca."%' AND DATE(date) BETWEEN '2007-09-27' AND '2007-09-29'";
mas com a concatenação de variáveis não..
$qr = "SELECT * FROM relatorios WHERE nomes LIKE '%".$busca."%' AND date BETWEEN '%".$date1."%' AND '%".$date2."%'";
mas no form, estou colocando da maneira certa: 2007-09-27 e 2007-09-29
recebendo com um POST
e msmo assim não funciona, como eu poderia fazer essa comparação seguindo a lógica q você disse?
como eu posso fazer ali?
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
opa, vlweu fiz o teste estático assim e funcionou..
$qr = "SELECT * FROM relatorios WHERE nomes LIKE '%".$busca."%' AND DATE(date) BETWEEN '2007-09-27' AND '2007-09-29'";
mas com a concatenação de variáveis não..
$qr = "SELECT * FROM relatorios WHERE nomes LIKE '%".$busca."%' AND date BETWEEN '%".$date1."%' AND '%".$date2."%'";
mas no form, estou colocando da maneira certa: 2007-09-27 e 2007-09-29
recebendo com um POST
e msmo assim não funciona, como eu poderia fazer essa comparação seguindo a lógica q você disse?
como eu posso fazer ali?
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
-
$qr = "SELECT * FROM relatorios WHERE nomes LIKE '%".$busca."%' AND date BETWEEN '%".$data1."%' AND '%".$data2."%'";
posso mudar o campo para DATE se precisar, mas já fiz e não consegui ter resultados
alguém tem uma solução para q eu possa cruzar essas informações?
lembrando q meus dados relacionados à data podem ser obtidos das seguintes maneiras
exemplo de 29/09/2007
2007-09-27 (campo como date)
20070927 (campo numerico visando uma comparação de valores)
se alguém tiver a solução usando o formato 27/09/2007 ou 27-09-2007 melhor ainda!
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
-
se buscar pela datax e por teste1, só terei como resultado o 1, buscar somente por datax e deixar o campo nomes em branco, ter como resultado 1 e 2
como eu posso fazer isso?
Sua sintaxe de sql foi escrita com erro. a cláusula WHERE aparece uma única vez na sintaxe e não duas conforme você escreveu.
O correto seria assim.
SELECT * FROM relatorios WHERE nomes LIKE '%".$busca."%' AND date LIKE '%".$date1."%'";
att
Denis Courcy
Substituição De Acentos Por Simbolos..porque?
em MySQL
Postado
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