Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) - Select com base em array


RRH

Pergunta

Estou precisando melhorar meu sistema de busca aqui que está filtrando pelo campo TIPO assim:

$tipo = explode (",",$_POST["tipo"]);

if(isset($tipo) AND $tipo != "") $and .= "AND tipo LIKE '%$tipo[0]%' OR tipo LIKE '%$tipo[1]%' ";

Da forma acima apresentada só consigo utilizar duas strings do array formado pelo input TIPO do meu formulário. Como aumentar o número de strings dinamicamente conforme a quantidade de valores inseridos no formulário?

Editado por RRH
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

function montaConsulta($get){
            $whr = "where";
            foreach($get as $chave => $valor){
                if($valor != ""){
                    $sql .= $whr;
                    $sql .= $and." $chave LIKE '%$valor%' ";
                    $and .= "and";
                    $whr = "";
                }                                
            }
            return $sql;
        }

Você passa um array com os campos a serem filtrados.

O Array, deve possuir o seguinte formato amigo,

campos[nome]

campos[idade]

campos[rua]

e o valor da possição no array, seria

campos[tipo] = $_POST['tipo'];

e no final, ele irá te retornar algo parecido com seu $and ^^

Link para o comentário
Compartilhar em outros sites

  • 0

O conteúdo postado acima é avançado para meus conhecimentos, então se estiver errado por favor me corrijam.

Pelo que entendi do código acima ele não resolve a minha dúvida. O que preciso é criar uma forma de selecionar todos os registros que contenham os códigos digitados no formulário de pesquisa.

Imaginemos o nosso alfabeto (A,B,C,D...) e suponhamos que eu queira filtrar todos os registros de uma tabela que contenham a letra A. Até aqui tudo bem, eu crio um formulário pra digitar a letra A e mando executar o select que vai trazer todos os registros com a letra A. Agora como fazer pra filtrar todos os registros da tabela que contenham as letras A,D,F,I,W? Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

Vamos ver RRH.

Você possui um formulário com 4 campos.

Tipo1, Tipo2, Tipo3 e Tipo4

que na sql ficaria assim?

$and .= "AND tipo LIKE '%$tipo[0]%' OR tipo LIKE '%$tipo[1]%' OR tipo LIKE '%$tipo[3]%' OR tipo LIKE '%$tipo[4]%'";

Você precisa de uma função que monte para você, essa condição dinamicamente?

Link para o comentário
Compartilhar em outros sites

  • 0

Preciso de uma função se for o caso, que monte a condição dinamicamente sim, mas com os dados de apenas um campo do formulário. A dificuldade está em montar o códico abaixo dinamicamente:

$and .= "AND tipo LIKE '%$tipo[0]%' OR tipo LIKE '%$tipo[1]%' OR tipo LIKE '%$tipo[3]%' OR tipo LIKE '%$tipo[4]%'"; ...e quantos outros OR tipo LIKE forem necessários de acordo com a quantidade de condições lançada no campo formulário separados por "," assim "A,B,C,D".

Link para o comentário
Compartilhar em outros sites

  • 0

ESerra, seu código funcinou aqui, porém os outros campos do formulário não estão funcionando, creio que o motivo esteja relacionado aos operadores lógicos. Veja como está sendo montada a query unindo seu código ao meu:

SELECT * FROM tabelamesclada JOIN tabela ON tabelamesclada.codnat = tabela.natureza WHERE situacao='E' AND natureza LIKE '%A02%' OR natureza LIKE '%A05%' OR natureza LIKE '%A21%' OR natureza LIKE '%B01%' AND bairro LIKE 'CENTRO%' ORDER BY tabela.id DESC
Mesmo tentando manualmente assim não funciona:
SELECT * FROM tabelamesclada JOIN tabela ON tabelamesclada.codnat = tabela.natureza WHERE situacao='E' AND bairro LIKE 'CENTRO%' AND natureza LIKE '%A02%' OR natureza LIKE '%A05%' OR natureza LIKE '%A21%' OR natureza LIKE '%B01%' ORDER BY tabela.id DESC

Ainda não encontrei como usar os operadores lógicos de forma mais complexa.

Editado por RRH
Link para o comentário
Compartilhar em outros sites

  • 0

Consegui resolver aqui fazendo dessa forma:

extract ($_POST);

$data = strtr ($data,"/","-");
// Fiz isso aqui porque quando o campo data não era preenchido era  enviado o valor 1969-12-31 o que fazia com que não retornasse nenhum  registro da tabela.
$data = date ('Y-m-d', strtotime ($data)); if ($data == '1969-12-31') $data = ""; 

//aqui é verificado os input em que é inserido apenas um valor
if(isset($sst) AND $sst != "") $and .= "AND sst = '".$sst."'";
if(isset($logradouro) AND $logradouro != "") $and .= "AND logradouro LIKE '%$logradouro%'";
if(isset($bairro) AND $bairro != "") $and .= "AND bairro LIKE '$bairro%'";
if(isset($mes) AND $mes != "") $and .= " AND MONTH(data)='$mes' ";
if(isset($dia) AND $dia != "") $and .= "AND diasemana LIKE '$dia%' ";
if(isset($af) AND $af != "") $and .= "AND af >= '1' ";
if(isset($pp) AND $pp != "") $and .= "AND pp >= '1' ";

//aqui é verificado os input em que são inseridos um ou mais valores separados por ","
if (isset($relator) AND $relator != "") {

$relator = explode (",",$_POST["relator"]);

 $and .= " AND ( 0";
  foreach($relator as $rel){
    $and .= " OR relator LIKE '%".$rel."%' ";
}
$and .= ") "; 
}


if (isset($natureza) AND $natureza != "") {

$natureza = explode (",",$_POST["natureza"]);

 $and .= " AND ( 0";
  foreach($natureza as $nat){
    $and .= " OR natureza LIKE '%".$nat."%' ";
}
$and .= ") "; 
}


if (isset($cv1) AND $cv1 != "") {

 $and .= " AND ( 0";
  foreach($cv as $cv2){
    $and .= " OR natureza LIKE '%".$cv2."%' ";
}
$and .= ") "; 
}


if (isset($op) AND $op != "") {

 $and .= " AND ( 0";
  foreach($operacoes as $op){
    $and .= " OR natureza LIKE '%".$op."%' ";
}
$and .= ") "; 
}

//e aqui monta a query
$sql = "SELECT * FROM tabelamesclada JOIN tabela ON tabelamesclada.codnat = tabela.natureza WHERE situacao='E'" .$and. "ORDER BY tabela.id DESC ";
//echo $sql;
$result = mysql_query($sql);
$total = mysql_num_rows($result);

Obrigado a todos pela ajuda.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...