como FAZER QUERY PARA CONSULTAR VÁRIOS CAMPOS DA TABELA

698 views
Skip to first unread message

Luiz Carlos Timbó

unread,
Jan 17, 2006, 7:26:38 AM1/17/06
to list...@googlegroups.com
Bom dia grupo.
 
     Já há algum tempo atrás, fiz esta pergunta para a outra lista de php, mas não obtive resposta que me ajudasse efetivamente.
     Preciso fazer uma consulta a uma tabela de Mysql, onde o usuário poderá escolher que tipo de dado ele quer pesquisar. Se só uma informação, ou duas informações , ou mais de duas informações. Então ele preencheria os campos do form e executaria a consulta.
     Já tentei com AND, OR e nada funcionou.
     Se alguem poder me ajudar, ficrei grato.
 
Obrigado.
Luiz Carlos Timbó

Carlos Junior

unread,
Jan 17, 2006, 8:03:59 AM1/17/06
to list...@googlegroups.com
A melhor maneira é vc fazer assim ( opinião minha )

Ex:

Seu select vc faz normal  
"SELECT * FROM tbl_cases WHERE (AQUI)"


No AQUI vc vai colocar toda string que vir da variavel resposta, olha abaixo

$campoform1 = "teste1";
$campoform2 = "teste2";
$campoform3 = "teste3";

$string = '';
if ($campoform1 != '')
{
    $string = $string."campo1 =".$campoform1." AND ";
}
if ($campoform2 != '')
{
    $string = $string."campo2 =".$campoform2." AND ";
}
if ($campoform3 != '')
{
    $string = $string."campo3 =".$campoform3." AND ";
}
// remove o ultimo AND com os espaços
$resposta = substr($string, 0, -5);

Assim vc terá
"SELECT * FROM tbl_cases WHERE '".$resposta ."'"

PS: Não esquece do trim e do addslashes
Com isso vc pode fazer um select de quantos campos quiser
somente com os dados pedidos
--
****************************************************
WWW.FREECODE.COM.BR
WWW.FREECODE.COM.BR/FORUM
WWW.FREECODE.COM.BR/DRARTIGOS

Carlos Junior

unread,
Jan 17, 2006, 8:30:19 AM1/17/06
to list...@googlegroups.com
E ai pegou o esquema ??

Carlos Junior

unread,
Jan 17, 2006, 8:41:04 AM1/17/06
to list...@googlegroups.com
Fazendo assim como falei a manutenção fica mole mole
e não tem que fazer varios SQL com combinação de consulta.
Fazer isso com 3 ainda vai, vai uma combinação com mais de
5 campos, ou até 4 campos já fica tosco demais !


Até

Luiz Carlos Timbó

unread,
Jan 17, 2006, 9:13:07 AM1/17/06
to list...@googlegroups.com
Valeu Carlos, vou tentar assim como você sugeriu.
 
Brigadão
Luiz Carlos

Carlos Junior

unread,
Jan 17, 2006, 9:49:44 AM1/17/06
to list...@googlegroups.com
Blz,  não tem erro nesse esquema !

Abs
Carlos Jr



Em 17/01/06, Luiz Carlos Timbó <lct...@gmail.com > escreveu:

Pedro Faria de Miranda Pinto

unread,
Jan 17, 2006, 10:39:17 AM1/17/06
to list...@googlegroups.com
Da pra otimizar mais esse codigo do Carlos Jr...

eu faria assim:

levando em consideração....

<input name="pesquisa[nome]" ... />
<input name="pesquisa[sobrenome]" ... />
...

no PHP

<?php
...

$where = array();
foreach($_POST['pesquisa'] as $k => $v) {
  if (empty($v)) continue;
  $where[] = "$k = '".mysql_escape_string($v)."'";
}

if (count($where) == 0) trigger_error('Digite algo para poder pesquisar', E_USER_ERROR);

$sql = "SELECT ... FROM tabela WHERE ". join(' AND ', $where);

...

?>


Voce pode usar o LIKE ao invez de = ... é pior em termos de performance... mas fica melhor para pesquisar...

t+

Em 17/01/06, Carlos Junior <free...@gmail.com> escreveu:



--
Pedro Faria de Miranda Pinto
http://www.phpavancado.net
http://www.mutantepower.com.br

Luiz Carlos Timbó

unread,
Jan 24, 2006, 9:50:31 AM1/24/06
to list...@googlegroups.com
Boa tarde Carlos.
 
     Estou tentando fazer aquela consulta por multiplos campo, mas não estou conseguindo.
     Tenho as variaveis, campo1, campo2, e campo3. Campo1 vem de uma combo, através de _POSTe é numerico, campo2 vem     por _POST e não é numerico, campo 3 vem por _POST e também não é numerico. Tem mais uma variavel que é variavel de sessão ($vscliente) e é numero.
 
    O problema está quando junto na string número e caracter, da erro. Se a opção for só numero funciona.
 
    Estou colando parte do código abaixo.
    Se possível dá uma olhada por favor.
 
   Obrigado.
   Luiz Carlos Timbó.
 
    
 <?
if (!isset($_SESSION)) {
    session_start();
}
$vscliente=$_SESSION["scliente"];
$ssetor=$HTTP_POST_VARS["vsetor"];
$stitulo=$HTTP_POST_VARS["vtitulo"];
$sconteudo=$HTTP_POST_VARS["vconteudo"];
 
include "../setup/setup.php";
 
$campo1=$ssetor;
$campo2=$stitulo;
$campo3=$sconteudo;
 
$string="";
If($campo1!=""){
  $string='tab_doc.setor'.'='.$campo1.' '.'AND'.' ';
  }
if($campo2!=""){
    $string=$string.'tab_doc.titulo'.'='.$campo2.' '.'AND'.' ';
  }
if($campo3!=""){
  $string=$string.'tab_doc.conteudo'.'='.$campo3.' '.'AND'.' ';
  }
$string=$string.'tab_doc.cliente'.'='.$vscliente;
$resposta=$string;

$sql=mysql_query("SELECT tab_doc.idagm,DATE_FORMAT(dtinclusao,'%d/%m/%Y'),tab_cliente.nome,tab_setor.nomesetor,tab_doc.titulo,tab_doc.conteudo,tab_doc.cliente
FROM((tab_doc
INNER JOIN tab_cliente ON tab_doc.cliente=tab_cliente.idcliente)
INNER JOIN tab_setor ON tab_doc.setor=tab_setor.idsetor)
WHERE $resposta",$conexion);
 
 
 
 
 
 
 

Carlos Junior

unread,
Jan 24, 2006, 10:23:23 AM1/24/06
to list...@googlegroups.com
Me manda como ficou sua variavel $resposta
Vc pode incluir os %  nos campos string para
sua busca ficar mais pro !




Em 24/01/06, Luiz Carlos Timbó <lct...@gmail.com> escreveu:

Luiz Carlos Timbó

unread,
Jan 24, 2006, 11:11:03 AM1/24/06
to list...@googlegroups.com
Carlos Junior.
 
 
              Esta é a opção da resposta que funciona.
              tab_doc.setor=001 AND tab_doc.cliente=001
 
              Esta é opção da resposta que não funciona.
              tab_doc.setor=001 AND tab_doc.titulo=bsp AND tab_doc.cliente=001
 
Atenciosamente.
Luiz Carlos Timbó.
----- Original Message -----

Carlos Junior

unread,
Jan 24, 2006, 11:16:37 AM1/24/06
to list...@googlegroups.com
Onde tem o string  usa o LIKE no lugar do =  e incrementa com %

Luiz Carlos Timbo

unread,
Jan 24, 2006, 12:00:07 PM1/24/06
to list...@googlegroups.com
Ai Carlos,
 
   Já resolví.
   Brigadão.
 
Luiz Carlos Timbó

 
Em 24/01/06, Carlos Junior <free...@gmail.com> escreveu:

Carlos Junior

unread,
Jan 24, 2006, 12:04:38 PM1/24/06
to list...@googlegroups.com
Fez o que eu falei e funcionou blz então ???



Em 24/01/06, Luiz Carlos Timbo <lct...@gmail.com> escreveu:
Reply all
Reply to author
Forward
0 new messages