Ir para conteúdo
Fórum Script Brasil

Denis Courcy

Moderadores
  • Total de itens

    3.089
  • Registro em

  • Última visita

Posts postados por Denis Courcy

  1. E ai pessoal..eu fiz uma transerência de servidor e quando fui passar o bd substituiu tudo quanto é acento por simbolos ..o que aconteceu?

    Obrigado!!

    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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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!
    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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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;$$

  14. 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

  15. 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

  16. "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 2

    att Denis Courcy

  17. 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?!
    Este é um caso para uso da função SOUNDEX(str)

    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

  18. 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

  19. 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

  20. 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, 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

  21. $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

  22. 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

×
×
  • Criar Novo...