Ir para conteúdo

POWERED BY:

Arquivado

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

MarceloZ

busca de resultado em campos independentes?

Recommended Posts

Carissimos

 

Tenho um sistema de busca que possui 4 campos de seleção

finalidade , tipo , cidade e bairro

 

na query se a gente coloca ... WHERE id_finalidade = '$finalidade' AND ....

 

o resultado depende de todos os 4 campos serem preenchidos

 

se a gente coloca OR

 

ele lista tudo o que tiver naquela em uma seleção .

 

Eu quero saber como faço uma busca independente

se preencho 1 valor ou 2 valores e obter o resultado desejado

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu quero ignorar os campos que não forem preenchidos e filtrar o resultado apenas nos campos selecionados

o OR ele não obedece o filtro e ele lista tudo.

então penso eu que teria que criar uma condição tipo

para ignorar o que não foi preenchido e realizar o fitro .

a minha duvida é como eu ignoro o que não foi preenchido

tipo : if ($variavel == null).....

 

eu li algo com array query condicional mas não entendi direito

$where = array();

if( isset( $_POST['estado'] ) && ! empty( $_POST['estado'] ) ) {

$where[] = sprintf( "id_estado = '%d'", $_POST['estado'] );
}

$query = 'SELECT * FROM cadastro';

if( count( $where ) > 0 ) {
$query .= ' WHERE ' . implode( ' AND ', $where );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só concatenar a string de acordo com o que foi preenchido.

	if(isset($_POST['estado']))
	{
		$consulta[] = "id_estado = '".$_POST['estado']."'";
	}
	if(isset($_POST['id_finalidade']))
	{
		$consulta[] = "id_finalidade";
	}
	
	for ($i = 0; $i < count($consulta); $i++)
	{
		$operador = ($i == 0) ? "WHERE": "AND";
		
		$consultaString .= $operador." ".$consulta[$i];
	}
	
	$query = "SELECT * FROM cadastro".$consultaString;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Huumm , deu erro

não sei identificar se o erro esta no concatenar string

mas aparece pra mim

que onde executa a while ...

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in 614

while($texto = mysql_fetch_assoc($query)) {

:closedeyes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

if(isset($_POST['buscar'])){    

$finalidade = $_POST['finalidade'];

$tipo = $_POST['tipo'];

$cidade = $_POST['cidade'];

$bairro = $_POST['bairro'];

 

if(isset($finalidade))

{

$consulta[] = "id_finalidade = '$finalidade'";

}

if(isset($tipo))

{

$consulta[] = "id_tipo = '$tipo'";

}

 

if(isset($cidade))

{

$consulta[] = "id_cidade = '$cidade'";

}

 

if(isset($bairro))

{

$consulta[] = "bairro = '$bairro'";

}

 

for ($i = 0; $i < count($consulta); $i++)

{

$operador = ($i == 0) ? "WHERE": "AND";

 

$consultaString .= $operador." ".$consulta[$i];

}

 

$query = "SELECT * FROM tb_imoveis".$consultaString;

 

if ($query == '') {

echo '<div id="alert">Nenhum resultado!</div>';

} else {

 

while($texto = mysql_fetch_assoc($query)){

$id = $texto['id'];

$finalidade2 = $texto['id_finalidade'];

$tipo2 = $texto['id_tipo'];

$cidade2 = $texto['id_cidade'];

$bairro2 = $texto['bairro'];

....

Compartilhar este post


Link para o post
Compartilhar em outros sites

para fins de debug:

 

$query = "SELECT * FROM tb_imoveis".$consultaString;
echo $query;

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça isso que o @William falou, que é basicamente o que sugeri no post #7. Cole o resultado aqui para avaliarmos a sintaxe, mas acredito ja ver uma coisa. Você copiou meu exemplo e sequer mexeu :dormindo:

 

Troque:

$query = "SELECT * FROM tb_imoveis".$consultaString;

Por:

$query = "SELECT * FROM tb_imoveis ".$consultaString;

A diferença está no espaço antes da concatenação. Provavelmente o WHERE está colado em tb_imoveis, dando pau na consulta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o resultado é

SELECT * FROM tb_imoveisWHERE id_finalidade = '1'AND id_tipo = '0'AND id_cidade = '0'AND bairro = '0'
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim , eu fiz isso mas a consulta retorna vazia!

:S


Eu troquei o AND por OR

 

SELECT * FROM tb_imoveis WHERE id_finalidade = '1' OR id_tipo = '0' OR id_cidade = '0' OR bairro = '0'
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas qual o intuito? Você quer que seja OR?

Finalidade 1 OU tipo 0 OU cidade 0 ou cidade 0?

 

Mas como pode ver, tem algo errado na construção... não era pra estar mostrando o tipo, nem cidade nem bairro na consulta.

 

Ao invés de isset($_POST['blablabla']), troque por empty. Porque mesmo vazio, a variável pode estar setada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você não executou a query.

 

$sql = "SELECT * FROM tb_imoveis ".$consultaString;

$query = mysql_query($sql) or die(mysql_error();
while($texto = mysql_fetch_assoc($query)){
E os códigos não estão batendo, vc tá mostrando um erro com _array, e o código q vc postou está com _assoc

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então ele esta funcionando exatamente como antes.

não obedece o filtro.

 

se seleciono , finalidade => venda

resultado => lista todas as vendas

 

se seleciono finalidade => venda , tipo => casa

resultado => lista todas as vendas de casa e apartamento.


Eu usei OR porque se uso AND

o valor da query tem que ser absoluto se não o resultado vem vazio.

finalidade = 1 E tipo = 0 ..


se eu colocar assim

if( isset( $_POST['finalidade'] ) && ! empty( $_POST['finalidade'] ) ) {


Uhu

consegui era isso mesmo

if(isset($finalidade) && ! empty($finalidade) )

 

Obrigado Maykel-ctba e William Bruno

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.