Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 390
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Busca de itens entre intervalo

30-10-2008 14:24

Boa Tarde :alien .
Tenho um sistema de busca que funciona perfeitamente, só que gostaria de acrescentar a busca por intervalo de "ano" , tenho pesquisado na net e ainda não encontrei a solução para este , por este motivo resolvi vir buscar ajuda d vcs.

item 1 - O acréscimo seria a busca por ano , a dificuldade é que esta coluna esta como decimal (4,0) e ja tenho aproximadamente 1350 itens cadastrados , logo qualquer tipo de alteração desta coluna seria inviavel.

item 2 - O script de busca anterior .
if($categoria || $marca || $model || $condicao) { $query = "SELECT * FROM $dbvin WHERE"; if($categoria) { $query .= " categoria='$categoria' AND"; } if($marca) { $query .= " marca='$marca' AND"; } if($model) { $query .= " model LIKE '%$model%' AND"; } if($condicao) { $query .= " condicao='$condicao'"; } if(substr($query, strlen($query)-4, 4) == ' AND') { $query = substr($query, 0, strlen($query)-4); } } else { $query = "SELECT * FROM $dbvin"; }

item 3 - Atual -> não funciona a busca por ano .
if($categoria || $marca || $model || $condicao || $anomodelo) { $query = "SELECT * FROM $dbvin WHERE"; if($categoria) { $query .= " categoria='$categoria' AND"; } if($marca) { $query .= " marca='$marca' AND"; } if($model) { $query .= " model LIKE '%$model%' AND"; } if($condicao) { $query .= " condicao='$condicao' AND"; } if($anomodelo) { $query .= " anomodelo BETWEEN 'data1' AND 'data2'"; } // trim extra AND if neccessary if(substr($query, strlen($query)-4, 4) == ' AND') { $query = substr($query, 0, strlen($query)-4); } } else { $query = "SELECT * FROM $dbvin"; } ++++ <td align="left">Ano Inicial <select class='menu' name='data1' style='width:50px'> <option value=''></option> <? for ($n = 0; $n < count($ano); $n++) { echo "<option value='$ano[$n]'>$ano[$n]</option>"; } ?> </select> </td> <td align="left"> Ano Final <select class='menu' name='data2' style='width:50px'> <option value=''></option> <? for ($n = 0; $n < count($ano); $n++) { echo "<option value='$ano[$n]'>$ano[$n]</option>"; } ?> </select> </td>

Agradeceria qualquer ajuda .
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17410
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Busca de itens entre intervalo

30-10-2008 14:53

SELECT * FROM suatabela WHERE adata BETWEEN 'datainicial' AND 'datafinal'

Como é retornado o valor ai? e qual tipo da coluna para data?
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 390
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Busca de itens entre intervalo

30-10-2008 15:08

O tipo de coluna é decimal(4,0) , era pra ser numeric , não sei pq na instalação ficou como decimal .

Quanto ao retorno , retorna todos os itens como c não fosse efetuado busca.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17410
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Busca de itens entre intervalo

30-10-2008 15:25

Se na tabela o ano está como por exemplo: 2008, e a consulta é somente com base no ano, você pode mudar o tipo da tabela, e acho que isso não afeta os dados, poderia estar como int

Fiz um teste aqui com uma tabela com os valores: 9 e 12

SELECT valores FROM minhatabela WHERE valores > '5' AND valores < '15'
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 390
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Busca de itens entre intervalo

30-10-2008 17:23

Só não funciona o ano , ja modifiquei a tabela para int .
if($categoria || $marca || $model || $condicao || $anomodelo ) { $query = "SELECT * FROM $dbvin WHERE"; if($categoria) { $query .= " categoria='$categoria' AND"; } if($marca) { $query .= " marca='$marca' AND"; } if($model) { $query .= " model LIKE '%$model%' AND"; } if($condicao) { $query .= " condicao='$condicao' AND "; } if($anomodelo) { $query .= " anomodelo BETWEEN anomodelo > 'data1' AND anomodelo < 'data2'"; } if(substr($query, strlen($query)-5, 5) == ' AND') { $query = substr($query, 0, strlen($query)-5); } } else { $query = "SELECT * FROM $dbvin"; } $link = mysql_connect($dbhost, $dbuser, $dbpass); $result = mysql_db_query($dbname, $query, $link); if(mysql_num_rows($result)) { $numitems = mysql_num_rows($result); } else { $numitems = 0; } mysql_close($link); no form ... <td align="left">Ano Inicial <select class='menu' name='data1' style='width:50px'> <option value=''></option> <? for ($n = 0; $n < count($ano); $n++) { echo "<option value='$ano[$n]'>$ano[$n]</option>"; } ?> </select> </td> <td align="left"> Ano Final <select class='menu' name='data2' style='width:50px'> <option value=''></option> <? for ($n = 0; $n < count($ano); $n++) { echo "<option value='$ano[$n]'>$ano[$n]</option>"; } ?> </select> </td>

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17410
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Busca de itens entre intervalo

30-10-2008 17:28

Pelo que ví usou o BETWEEN no seu script, esse deve ser usado para datas. No seu caso se for valores como: 1000, 100 use do modo que indiquei no exemplo.
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 390
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Busca de itens entre intervalo

30-10-2008 18:05

desculpa, modifiquei e continuou na mesma ...
Continua não retornando por ano , retorna todos os registros como se estivesse buscando todos .
0
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 390
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Busca de itens entre intervalo

03-11-2008 17:34

Estou retornando este pois é a unica coisa que falta ...
:shock
Continua não efetuando a busca .

Fiz outras modificações porém ainda continua na mesma .
if($anomodelo) { $query .= " anomodelo BETWEEN '$datainicio' AND '$datafim'";}

ou ..
if($categoria || $marca || $model || $condicao || $anomodelo) { $query = "SELECT * FROM $dbvin WHERE"; if($categoria) { $query .= " categoria='$categoria' AND"; } if($marca) { $query .= " marca='$marca' AND"; } if($model) { $query .= " model LIKE '%$model%' AND"; } if($condicao) { $query .= " condicao='$condicao' AND"; } if($anomodelo) { $query .= " anomodelo >= 'datainicio' AND anomodelo <= 'datafim'";} if(substr($query, strlen($query)-4, 4) == ' AND') { $query = substr($query, 0, strlen($query)-4); } } else { $query = "SELECT * FROM $dbvin"; } $link = mysql_connect($dbhost, $dbuser, $dbpass); $result = mysql_db_query($dbname, $query, $link); if(mysql_num_rows($result)) { $numitems = mysql_num_rows($result); } else { $numitems = 0; } mysql_close($link); ?> -----////----- <td align="left">Ano Inicial :<br /> <select class='menu' name='datainicio' style='width:60px'> <option value=''></option> <? for ($n = 1960; $n <= 2009; $n++) { echo "<option value='$n'>$n</option>"; } ?> </select></td> <td align="left"> Ano Final :<br /> <select class='menu' name='datafim' style='width:60px'> <option value=''></option> <? for ($n = 1960; $n <= 2009; $n++) { echo "<option value='$n'>$n</option>"; } ?> </select> </td>

:shock :shock :shock
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17410
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Busca de itens entre intervalo

03-11-2008 18:00

Foi como eu já disse anteriormente, BETWEEN é usado para data formato: aaaa/mm/dd

Indiquei usar a seguinte base

SELECT valores FROM minhatabela WHERE valores > '0000' AND valores < '0000'
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 390
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Busca de itens entre intervalo

03-11-2008 18:11

Ok web, é o que estou usando.
if($anomodelo) { $query .= " anomodelo >= '$datainicio' AND anomodelo <= '$datafim'";}

quanto ..
if($anomodelo) { $query .= " anomodelo >= 'datainicio' AND anomodelo <= 'datafim'";}

Retorna todos os resultados, como c eu estivesse efetuando a busca por todos .

acima foi só questão de informação.

coloquei ....
$link = mysql_connect($dbhost, $dbuser, $dbpass); $result = mysql_db_query($dbname, $query, $link); if(mysql_num_rows($result)) { $numitems = mysql_num_rows($result); } else { $numitems = 0; } echo $query;//Copie e cole no phpMyAdmin e mande pra mim tb mysql_close($link); ?>

peguei o resultado que foi ... select * from veiculos colei no sql do phpmyadmin e retornou :

Mostrando registos 0 - 29 (30 total, O Query demorou 0.0015 sec)

Porém continua não efetuando a busca por ano . mostra tudo independente do ano .
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17410
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Busca de itens entre intervalo

03-11-2008 18:34

Já testou a query com valores manuais? Isso vai confirmar se as datas de intervalo estão vindo ou não.

if($anomodelo) { $query .= " anomodelo >= '1800' AND anomodelo <= '1900'";}

Testa também: anomodelo='2008', para ver se filtra algo, de acordo com os anos cadastrados.
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 390
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Busca de itens entre intervalo

03-11-2008 18:56

fiz desta forma .
Troquei o select do form por input.
Dei valor a value

continua como antes , sem resultado.

-- POST ANEXADO --

Olha só ... peguei o exportar e descobri que o ano esta sem aspas na tabela ....

`viewed`, `numimages`, `cadastro`, `anomodelo`, `marca`, `model`
'3', '0', '6674', 2000, 'VOLKSWAGEN', 'GOL SPECIAL 1.0'

teria como corrigir na tabela ?
ou teria outra forma mais facil ?
insert da pagina '$_POST[anomodelo]',
form - <?=$anomodelo?>

são só quase 1400 itens ....

é o único item da tabela que ficou sem aspas ....

-- POST ANEXADO --

é o tipo de coluna ... int , que deixa sem as aspas .
desculpa .

Porém isto influencia ?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17410
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Busca de itens entre intervalo

04-11-2008 14:08

Não post seguidamente ou terá seu cadastro desativado.
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17410
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Busca de itens entre intervalo

04-11-2008 14:17

Sim, o int fica sem aspas, não interfere, ao invés de passar valor de input, tenta manualmente

SELECT essecampo FROM minhatabela WHERE essecampo > essenumero AND essecampo < essenumero
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 390
Sexo: Masculino
Localização: VOLTA REDONDA RJ
Contato:

Busca de itens entre intervalo

04-11-2008 16:47

Descobri um erro.
estava no startitem da página , não constava anomodelo.

Se eu colocar para procurar pelo ano somente ....
if($anomodelo) { $query .= " anomodelo='$anomodelo' ";} no form -> <td align="left">Ano :<br /> <select class='menu' name='anomodelo' style='width:60px'> <option value=''></option> <? for ($n = 1960; $n <= 2009; $n++) { echo "<option value='$n'>$n</option>"; } ?> </select></td>

Funciona perfeitamente , mas para comparação , não deu certo .
BETWEEN e ou >= <=
no stariten da pagina com ...
&anomodelo=$anomodelo
&anomodelo=$datainicio&anomodelo=$datafim

no momento esta assim ...
$linkstring = "&startitem=$startitem&startpage=$startpage&endpage=$endpage &revendauto=$revendauto&seed=$seed&categoria=$categoria&marca=$marca&model=$model&anomodelo=$anomodelo";

fiz quebra de linha para melhor entendimento .

todos os resultados foram iguais para CHAR - YEAR - INT - BETWEEN - >= - <=
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17410
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Busca de itens entre intervalo

04-11-2008 16:53

Complicado, eu já testei e deu, você tem que rever ai teu BD se não tá deixando algum valor para consulta sem vir, testar valores manualmente, etc...
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado