Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Problema Com Between


Joao Paulo M.

Pergunta

Bom, eu consegui fazer uma busca com a ajuda de um membro aqui do fórum, mas a parte anterior era o basico, agora eu preciso de que seja verificado na busca as datas e também os nomes

$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!

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
$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

Link para o comentário
Compartilhar em outros sites

  • 0

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?

consegui..

ao invés de usar assim:

$qr = "SELECT * FROM relatorios WHERE nomes LIKE '%".$busca."%' AND date BETWEEN '%".$date1."%' AND '%".$date2."%'";

usei assim:

$qr = "SELECT * FROM relatorios WHERE nomes LIKE '%".$busca."%' AND date BETWEEN '".$date1."' AND '".$date2."'";

sem os %

falou

vlw!

Editado por Joao Paulo M.
Link para o comentário
Compartilhar em outros sites

  • 0
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

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...