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

Filtro de Busca duvida 01


igor Br22

Pergunta

Galera, estou incrementando um sisteminha de busca no site, mas nesse, coloque um formulario para o usuario fazer uma busca segmentada, por assunto, data e palavras chaves, sendo que o usuario optará buscar por apenas um deles ou fazer uma busca mais precisa preenchendo todos os campos.

eu cheguei até esse codigo aqui para fazer a consulta no BD:

if ( ($txt_assunto != "") and ($txt_data != "") and ($txt_chave != "")) {
         $sql = "SELECT * FROM pg_detalhe WHERE pd_conteudo LIKE '%$txt_assunto%' and pd_data LIKE '%$txt_data%' pd_keywords LIKE '%$txt_chave%'  ";  }



if ( ($txt_assunto != "") and ($txt_data != "") ) {
         $sql = "SELECT * FROM pg_detalhe WHERE pd_conteudo LIKE '%$txt_assunto%' and pd_data LIKE '%$txt_data%' ";  }
         
         if ( ($txt_assunto != "") and ($txt_chave != "") ) {
         $sql = "SELECT * FROM pg_detalhe WHERE pd_conteudo LIKE '%$txt_assunto%' and pd_keywords LIKE '%$txt_chave%' ";               }
    
        if ( $txt_assunto != "")  {
         $sql = "SELECT * FROM pg_detalhe WHERE pd_conteudo LIKE '%$txt_assunto%' ";  }
         else
     { 
        $sql = "SELECT * FROM pg_detalhe WHERE pd_data LIKE '%$txt_data%' "; }
        
    if ( $txt_chave != "") { 
        $sql = "SELECT * FROM pg_detalhe WHERE pd_keywords LIKE '%$txt_chave%' "; }

Porém os 3 ultimos ifs esta funcionando direitinho, mas se eu quero busca por certo assunto numa determinada data, ele consulta somente a tabela assunto,

se busca palavra chave com um assunto, ele consulta somente a tabela da palavra chave e assim por diante, resumindo se for para fazer uma busca mais precisa ou seja em duas tabelas ele não ta fazendo. alguém sabe porque?

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

3 respostass a esta questão

Posts Recomendados

  • 0

apos fazer os resultadores sairem meio que no braço, agora estou tendo dificuldades de fazer a paginação do resultado da busca.

aqui é o inicio da paginação

//INICIO PAGINACAO PARTE 1

        $num_por_pagina = 10;

    // descobrir o numero da pagina q sera exibida
    //se o numero da pagina não for informado defina como 1
        $pagina = $_GET['pagina'];
        if(!$pagina){
        $primeiro_registro = 0;
        $pagina = 1;
        }else{
        $primeiro_registro = ($pagina - 1) * $num_por_pagina;
            }
abaixo são as condicoes de consulta SQL depedendo dos valores colocados nos campos, nos quais são 3, data, assunto e palavras chaves, onde usuario pode filtrar pelos campos a pesquisa, Acredito que deve ter uma forma melhor de fazer essas consultas mas....
// inicio seleção de IF para consulta SQL 
    
    // TODOS OS CAMPOS PREENCHIDOS
            if ( ($txt_palavras != "") and ($txt_data != "") and ($txt_chave != "")) {
            
             $npalavra = explode(" ", $txt_palavras);
        $totalPalavras = count($npalavra);  
          for($i = 0; $i < $totalPalavras; $i++)
          {  
            $complemento .= " AND (pd_conteudo LIKE '% " . $npalavra[$i] . " %' OR pd_nome LIKE '%" . $npalavra[$i] . "%' )";
        }
             $condicao = "WHERE pd_status = 1 $complemento and pd_data LIKE '%$txt_data%' and pd_keywords LIKE '%$txt_chave%' ORDER BY pd_data DESC  "; 
              }
         
         // ASSUNTO E DATA PREENCHIDO
         
        if ( ($txt_palavras != "") and ($txt_data != "") and ($txt_chave == "")) {
        
         $npalavra = explode(" ", $txt_palavras);
        $totalPalavras = count($npalavra);  
          for($i = 0; $i < $totalPalavras; $i++)
          {  
            $complemento .= " AND (pd_conteudo LIKE '% " . $npalavra[$i] . " %' OR pd_nome LIKE '%" . $npalavra[$i] . "%' )";
        }
        
        $condicao = " WHERE pd_status = 1 $complemento  and pd_data LIKE '%$txt_data%' ORDER BY pd_data DESC ";  }
         
         
         //ASSUNTO E CHAVE PREENCHIDOS
         
         if ( ($txt_palavras != "") and ($txt_chave != "") and ($txt_data == "")   ) {
         
          $npalavra = explode(" ", $txt_palavras);
        $totalPalavras = count($npalavra);  
          for($i = 0; $i < $totalPalavras; $i++)
          {  
            $complemento1 .= " AND (pd_conteudo LIKE '% " . $npalavra[$i] . "%' )";
        }
        
         
         $condicao = " WHERE pd_status = 1 $complemento1 and pd_keywords LIKE '%$txt_chave%' ORDER BY pd_data DESC ";               }
    
    
    // SOMENTE CHAVE PREENCHIDA     
         if (( $txt_chave != "") and ($txt_palavras == "") and ($txt_data =="") ) { 
         
          $npalavra = explode(" ", $txt_palavras);
        $totalPalavras = count($npalavra);  
          for($i = 0; $i < $totalPalavras; $i++)
          {  
            $complemento1 .= " AND  (pd_conteudo LIKE '% " . $npalavra[$i] . "%' )";
        }
         $condicao = " WHERE pd_status =1  $complemento1 and pd_keywords LIKE '%$txt_chave%' ORDER BY pd_data DESC "; }

    // CHAVE E DATA PREENCHIDA
         if (( $txt_chave != "") and ($txt_palavras == "") and ($txt_data != "")) { 
        $condicao = " WHERE pd_keywords LIKE '%$txt_chave%' AND pd_data LIKE '%$txt_data%' ORDER BY pd_data DESC "; }
    
    // SOMENTE ASSUNTO PREENCHIDO
        
        
        if (( $txt_palavras != "") and ($txt_chave == "") and ($txt_data == "") )  {
        
         
         $condicao = " WHERE pd_status = 1 $complemento ORDER BY pd_data DESC ";  }
                
                    
         // SOMENTE DATA PREENCHIDA
        if (($txt_data != "") and ($txt_palavras == "") and ($txt_chave == ""))
     { 
        $condicao = " WHERE pd_data LIKE '%$txt_data%' ORDER BY pd_data DESC "; }
        
    // FIM SELEÇÃO DE IFS PARA CONSULTA SQL;
Abaixo consulta real da SQL, juntamente com as variaveis de limite para paginação;
// consulta real da SQL com a condição selecionada e variaveis de paginacao        
        $sql = "SELECT * FROM pg_detalhe $condicao LIMIT $primeiro_registro, $num_por_pagina";
        
         $qry = mysql_query($sql, $conn) or die(mysql_error());
         $linha = mysql_fetch_assoc($qry);
         $consulta1 = "SELECT COUNT(*) FROM pg_detalhe WHERE pd_status = 1 $complemento";
abaixo o painel da paginação:
$consulta = "SELECT COUNT(*) FROM pg_detalhe WHERE pd_status = 1 $complemento";
         list($total_usuarios) = mysql_fetch_array(mysql_query($consulta,$conn));
                    $total_paginas = $total_usuarios/$num_por_pagina;
                    $prev = $pagina - 1;$next = $pagina + 1;
          // se página maior que 1 (um), então temos link para a página anterior
                    if ($pagina > 1)
                     {  
                       $prev_link = "<a href=\"buscanoticia.php?pagina=$prev&id=$pre\">Anterior"; 
                     } else { $prev_link = "Anterior"; }
                // senão não há link para a página anterior   
                
                // se número total de páginas for maior que a página corrente, 
                // então temos link para a próxima página
                      if ($total_paginas > $pagina) 
                    {   
                         $next_link = "<a href=\"buscanoticia.php?pagina=$next&id=$pre\">Próximo"; 
                     } else { 
                // senão não há link para a próxima página
                    $next_link = "Próxima";  }
    
    
        $total_paginas = ceil($total_paginas);
        $painel = "";
          for ($x=1; $x<=$total_paginas; $x++)
           {    if ($x==$pagina) {$painel .= " [$x] ";   }
    // se estivermos na página corrente, não exibir o link para visualização desta página
                 else {$painel .= "<a href=\"buscanoticia.php?pagina=$x&id=$pre\"> $x </a>";    } 
          }
    // exibir painel na tela
    echo "$prev_link | $painel | $next_link"; 
    
    //FIM PAGINAÇÃO PARTE

logo percebi que o primeiro motivo da paginação não esta funcionando é devido as condicoes, pois na consulta geral do SQL, só vai pegar a variavel $condicao se entrar no if $txt_assunto != "",

outra coisa que esta me intrigando é que não está aparecendo o ultimo elemento do resultado, se o limite por pagina é 10 aparece 9 se é 5 aparece 4 e assim por diante, allguem por favorrrrr me ajude.....

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...