Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alisson<?php (); ?>

Busca Avançada com PHP e MySQL

Recommended Posts

Galera é o seguinte..

Depois de muito tentar aqui, pesquisar, correr no google.. e não achar solução, vô postar aqui a dúvida.

 

Tenho uma busca em uma tabela de anúncios de um portal.. Segue o <?php

//recebendo os dados por GET
$modelo = $_GET['modelo'];
$cor = $_GET['cor'];
$combustivel = $_GET['combustivel'];
$cidade = $_GET['cidade'];
$ano1 = $_GET['ano1'];
$ano2 = $_GET['ano2'];
$de = $_GET['de'];
$ate = $_GET['ate'];
$marca = $_GET['marca'];
$opcionais = $_GET['opcionais'];
$tipo = $_GET['tipo'];
//formatando a busca
if($cidade = "Todas") { $w1 = ""; } else { $w1 = "AND cidade = '$cidade'"; }
if($combustivel == "Todos" ) { $w2 = ""; } else { $w2 = "AND combustivel = '$combustivel'"; }
if($ano1 == "" && $ano2 == "") { $w3 = ""; } else { $w3 = "AND ano BETWEEN '$ano1' AND '$ano2'"; }
if($de != "0.00" && $ate != "0.00" ) { $w4 = "AND valor BETWEEN '$de' AND '$ate'"; } else { $w4 = ""; }
if($opcionais == "") { $w5 = ""; } else { $w5 = "AND (opcionais LIKE '%" . $opcionais. "%')"; } // AQUI É O CENTRO DE TODO O PROBLEMA
if($cor == "Todas" ) { $w6 = ""; } else { $w6 = "AND cor = '$cor'"; }
if($marca == "" ) { $w7 = ""; } else { $w7 = "AND marca = '$marca'"; }
if($modelo == "" ) { $w8 = ""; } else { $w8 = "AND modelo LIKE '%$modelo%'"; }
$contar = mysql_query("SELECT * FROM ache_anuncios WHERE (categoria='Veículos' AND status='ativo' AND tipo='$tipo') $w1 $w2 $w3 $w4 $w5 $w6 $w7 $w8");

 

Ela funciona beleza, SE eu não colocar na query o $w5 que é a busca nos opcionais.. quando eu ponho ele.. ela sempre retorna 0 resultados

 

nesse link o $w5 tá comentado:

http://www.acheima.com.br/res,detalhada,veiculo.html?modelo=Vectra&cor=Todas&combustivel=Todos&cidade=Todas&ano1=&ano2=&de=0.00&ate=0.00&marca=CHEVROLET&tipo=Carros&em=&opcionais=Ar+condicionado.Trava+El%E9trica.Vidro+El%E9trico.&button6=Listar+Resultados+da+Busca

 

Esses opcionais são em só um campo no banco de dados .. OPCIONAIS / vidro elétrico;fumê;trava; e assim vai

Se alguém tiver uma luz pra me guiar nisso ai eu vô ficar feliz pra diaxo kk :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

montei com arrays por ex.:

opcionais[0] = Vidro Elétrico,

opcionais[1] = Trava,

 

etc..

 

o problema é na montagem da query no sql .. se eu selecionar só um opcional. (Ar Condicionado, por exemplo) ela funciona perfeitamente, mais quando seleciona mais de uma (Ar Condicionado;Vidro Elétrico;Trava;Fumê) ela já não retorna mais nenhum resultado.

 

OS CHECKS ESTÃO ASSIM:

<input type="checkbox" name="opcionais[0]" value="Ar condicionado" id="opcionais_0" />
                       Ar condicionado</label>
                       <br />
                       <label>
                         <input type="checkbox" name="opcionais[1]" value="Trava Elétrica" id="opcionais_1" />
                         Trava Elétrica</label>
                       <br />
                       <input type="checkbox" name="opcionais[2]" value="Limpador Traseiro" id="opcionais_2" />
                       Limpador Traseiro<br />
                       <label>
                         <input type="checkbox" name="opcionais[3]" value="Banco de Couro" id="opcionais_3" />
                         Banco de Couro</label>
                       <br />
                       <label>
                         <input type="checkbox" name="opcionais[4]" value="Teto Solar" id="opcionais_4" />
                         Teto Solar</label>
                       <br />
                       <input type="checkbox" name="opcionais[5]" value="Protetor de Caçamba" id="opcionais_5" />
                       Protetor de Caçamba<br />

 

são vários

 

e depois eu faço do array() um input hidden e passo por GET

<input type="hidden" name="opcionais" value="<?php 
  foreach($_POST['opcionais'] as $id => $opcional) {
	  $op= $opcional;
	  echo "$op."; } ?>" />

 

E uso o LIKE %% para buscar essa variável no banco..

Não sei como resolver isso.. :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

porque você recebe por POST e depois passa por GET??

 

 

O ideal é ter uma tabela no banco com todos os opcionais cadastrados.

E uma tabela com os opcionais de cada carro.

veja aki as 3 formas normais

senão você vai ter muito trabalho para fazer essa busca.

Compartilhar este post


Link para o post
Compartilhar em outros sites

porque você recebe por POST e depois passa por GET??

 

 

O ideal é ter uma tabela no banco com todos os opcionais cadastrados.

E uma tabela com os opcionais de cada carro.

veja aki as 3 formas normais

senão você vai ter muito trabalho para fazer essa busca.

 

è verdade, é a melhor opção pra busca mesmo.. já pensei aqui numa forma de dividir pra duas tabelas.. porém vô ter que fazer dois selects em uma query..

recebo por post e passo por get para facilitar na hora da paginação dos resultados, pois tenho que repassá-los para as outras páginas e com post dificulta um pouco..

como poderia fazer isso??

Compartilhar este post


Link para o post
Compartilhar em outros sites

tudo bem,

já que você prefere dessa forma

muda isso

<input type="hidden" name="opcionais" value="<?php  
         foreach($_POST['opcionais'] as $id => $opcional) { 
                 $op= $opcional; 
                 echo "$op."; } ?>" />

 

para isso

 

<?php
echo "<input type='hidden' name='opcionais' value='".implode('.',$_POST['opcionais'])."' />
?>

 

implode()

 

 

você está fazendo gambiarra!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

tudo bem,

já que você prefere dessa forma

muda isso

<input type="hidden" name="opcionais" value="<?php  
         foreach($_POST['opcionais'] as $id => $opcional) { 
                 $op= $opcional; 
                 echo "$op."; } ?>" />

 

para isso

 

<?php
echo "<input type='hidden' name='opcionais' value='".implode('.',$_POST['opcionais'])."' />
?>

 

implode()

 

 

você está fazendo gambiarra!!

 

putz cara.. minha intenção é deixar tudo sem gambiarra..

vou estudar mais e ver o que posso reduzir ou ajustar ao correto,

 

vou fazer assim..

1- criar uma nova tabela somente para os opcionais..

 

então como posso fazer essa query retornar os resultados esperados fazendo a consulta na tabela dos veículos e dos opcionais?

 

tenho em mente a seguinte estrutura para a tabela:

ID - ANUNCIO - OPCIONAIS

ou seria mais correto eu adicionar cada opicional em registros diferentes, por exemplo:

ID - ANUNCIO - OPCIONAL

01 - 259 - Vidro elétrico

02 - 259 - Fumê

 

etc..

 

e como ficaria essa query da consulta?

 

Brigadão Victor :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

exemplo aki

 

tabela opcionais

-----------------------
| ID |     opcional   |
-----------------------
| 01 | vidro elétrico |
| 02 | trava          |  
| 03 | ar condicionado|
| 04 | alarme         |
|____|________________|

tabela veículos

--------------------------------
| ID |    tipo    | fabricante |
--------------------------------
| 01 |    Gol     |      VW    |
| 02 |    Uno     |    FIAT    |  
| 03 |   Vectra   |  Chevrolet |
| 04 |   Focus    |    FORD    |
|____|____________|____________|

tabela veiculos_opcionais

----------------------------
| id_veiculo | id_opcional |
----------------------------
|     01     |     01      |
|     01     |     02      |  
|     01     |     03      |
|     04     |     03      |
|____________|_____________|

 

query de consulta

select 
  v.`tipo`,
  v.`fabricante`,
  o.`opcional`
from 
  `veiculos` v 
left join 
  `veiculos_opcionais` vo 
on
  vo.`id_veiculo` = v.`ID` 
left join 
  `opcionais` o 
on 
  vo.`id_opcionais` = o.`ID`

 

JOIN

 

saída da query

--------------------------------------
| tipo | fabricante |    opcional    |
--------------------------------------
| Gol  |     VW     | vidro elétrico |
| Gol  |     VW     |      trava     |
| Gol  |     VW     | ar condicionado|
|Focus |    FORD    | ar condicionado|
|____________________________________|

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.