Ir para conteúdo

POWERED BY:

Arquivado

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

Douglas_R

[Resolvido] Buscando em vários campos

Recommended Posts

Bom galera estou fazendo um sistema de estacionamento, e preciso gerar um relatório...

Fiz tipo um esquema de busca, onde a pessoal coloca o que ela quer encontrar pra gerar o relatório...

 

Ex:

Modelo: Palio

Marca: Fiat

Estado: SP

 

Ele listaria todos os carros cadastrados com essas descrições...

Porém se eu deixou um desses campos vazios... ele não retorna nenhum resultado...

O problema creio que esteja na minha query...

$sql = mysql_query(SELECT * FROM `veicdb` WHERE `modelo` LIKE '%$modelo%' AND `marca` LIKE '%$marca%' AND `estado` LIKE '%$estado%') or die (mysql_error( ));
Se eu não entrar com nenhum valor em estado por exemplo, ele não me retorna nenhum resultado...

bom eu sei que ele não retorna porque não tem nenhum campo vazio na tabela...

O que eu poderia estar fazendo para ele localizar mesmo assim os veículos de tal modelo, e tal marca, ou só tal marca e tal estado???

Compartilhar este post


Link para o post
Compartilhar em outros sites

a forma que eu acho mais simples é testar se existe valor para essas variaveis, caso haja, inseri o where no SQL.

 

$sql = select alguma coisa from outra coisa where 1 = 1

 

if (!empty(post ou get parametro1))

$sql .= "AND ".............

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz uma verificação js pra obrigar a preeencher todos os campos?

 

 

ou entao algo do tipo

$query = "SELECT * FROM veicdb WHERE ";

if($modelo != '')
$query .= " modelo LIKE '%$modelo%' "; 

if($marca != '')
$query .= " AND marca LIKE '%$marca%' ";

if($estado != '')
$query .= " AND estado LIKE '%$estado%' ";


$sql = mysql_query($query) or die (mysql_error( ));

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo, pode ou não ter todos os campos, são muitos campos... Tem o cargo do funcionário, a seção, o modelo do veiculo, a marca, a cor, o ano... e por exemplo, eu quero gerar um relatório de todos os carros verdes do modelo Monza... ou todos os Monzas dos funcionários com nome de João...

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao usa a 2 opcao que coloquei, você vai "montando o sql" de acordo com os campos que foram preenchidos no formulario. Se o campo foi preenchdio você adiciona no where o filtro correspondente

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao usa a 2 opcao que coloquei, você vai "montando o sql" de acordo com os campos que foram preenchidos no formulario. Se o campo foi preenchdio você adiciona no where o filtro correspondente

 

Entendi goruks... obrigado pela ajuda...

 

Está dando esse erro agora:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'nomefunc LIKE '%Douglas%'' at line 1

 

$query = mysql_query("SELECT * FROM veicdb, cartaoestacdb WHERE ");
	
	if($nomefunc != '')
	$query .= "nomefunc LIKE '%$nomefunc%' ";

	if($rerg != '')
	$query .= "rerg = '$rerg' ";
	
	if($codpostgrad != '0')
	$query .= "funcao = '$codfuncao' ";
	
	$sql = mysql_query($query) or die (mysql_error( ));

Não estou conseguindo resolver esse erro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloca assim:

echo $query;
 $sql = mysql_query($query) or die (mysql_error( ));
analiza como está sendo formada a query..

 

está faltando um AND ou OR entre as cláusulas..

Compartilhar este post


Link para o post
Compartilhar em outros sites

você nao pode fazer isso ja na prmiera linha... aqui você ja esta executando o sql

$query = mysql_query("SELECT * FROM veicdb, cartaoestacdb WHERE ");

 

a ideia é criar uma variavel $query que vai guardar a STRING do comando sql e a medida que você for acrecentando os filtros vai concatenando nela. No final você vai ter nessa variavel o sql formado e entao executa ele.

 

$query = "SELECT * FROM veicdb, cartaoestacdb WHERE veicdb.campo_chave_primaria = cartaoestacdb.campo_chave_estrangeira ";
        
if($nomefunc != '')
$query .= " AND nomefunc LIKE '%$nomefunc%' ";

if($rerg != '')
$query .= " AND rerg = '$rerg' ";
        
if($codpostgrad != '0')
$query .= " AND funcao = '$codfuncao' ";
        
//enquanto tiver testando você pode imprimir o sql pra ver se esta tudo ok
echo $query;
       
//aqui você executa o string sql que esta na variavel $query
$sql = mysql_query($query) or die (mysql_error( ));

 

outra coisa que esta faltando ainda ai é adicionar os "AND" no sql dependendo de qual foi concatenar na variavel ou não

 

tb notei que você adicionou mais uma tabela

 

veicdb, cartaoestacdb

 

neste caso você nao pode esquecer de deixar ali na primeira linha onde você inicia o sql no WHERE ja adicionar a junção das tabelas...

aquela linha ali é sua base ela sempre vai ser fixa

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw William e goruks, corrigi essa parte que vocês falaram da query

 

$query = mysql_query("SELECT * FROM veicdb, cartaoestacdb WHERE ");

Tirei o mysql_query, deu certo essa parte...

 

Porém quando vou pesquisar pelo campo que é chave primária de uma tabela e estrangeira da outra... ele está dando esse erro:

Column 'rerg' in where clause is ambiguous

 

Minha busca está assim...

	$query = "SELECT * FROM veicdb, cartaoestacdb WHERE veicdb.rerg = cartaoestacdb.rerg";
	
	if($nomefunc != '')
	$query .= " AND nomefunc LIKE '%$nomefunc%' ";

	if($rerg != '')
	$query .= " AND rerg = '$rerg' ";
	
	if($codpostgrad != '0')
	$query .= " AND codpostgrad = '$codpostgrad' ";
	
	echo $query;
	$sql = mysql_query($query) or die (mysql_error( ));

Compartilhar este post


Link para o post
Compartilhar em outros sites

precisa especificar de qual tabela você quer...

`veicdb`.`rerg`

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.