Ir para conteúdo
DinhoPHP

ORDER BY Dinâmico

Recommended Posts

Olá!

Alguém pode me dar uma luz sobre fazer um ORDER BY, hora ASC ou hora DESC? Por favor! Estou utilizando PHP e JS no projeto.

 

$pegadados = $pdo->prepare("SELECT * FROM produtos WHERE categoria LIKE '%$dataSearch%' OR marca LIKE '%$dataSearch%' OR produto LIKE '%$dataSearch%' OR modelo LIKE '%$dataSearch%' OR descricao LIKE '%$dataSearch%' ORDER BY $filter $filter2");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue exemplo:


CÓDIGO:

<?php

$pegadados = $pdo->prepare ("SELECT * FROM produtos WHERE categoria LIKE '%$dataSearch%' OR marca LIKE '%$dataSearch%' OR produto LIKE '%$dataSearch%' OR modelo LIKE '%$dataSearch%' OR descricao LIKE '%$dataSearch%' ORDER BY $filter ASC, $filter2 DESC");


LINK ÚTIL:

http://www.sqlservertutorial.net/sql-server-basics/sql-server-order-by/

Compartilhar este post


Link para o post
Compartilhar em outros sites

DinhoPHP

É bem simples.

O que você precisa ter é algo que lhe "direcione" para que hora o seu select tenha o ORDER BY ASC ou ORDER BY DESC.

Tenho um sistema que o usuário consulta ORDENS DE SERVIÇO, ele busca por nome ou por range de data, então criei um RADIO BUTTON para que ele escolha a ordem dos registros se "DO MAIS NOVO PARA O MAIS ANTIGO - ASC" ou "DO MAIS ANTIGO PARA O MAIS NOVO - DESC".

Então no meu SELECT eu coloco o VALUE desse radio button, que fica assim:

 

$variavelValueRadio - ASC ou DESC

select * from tb_ordens where nome like '%$variavelNome%' ORDER BY data $variavelValueRadio

 

No seu caso, você já tem o ORDER BY no comando, agora você precisa ver a interassão que este ORDER BY vai receber, como no meu caso o estimulo do meu ORDER BY vem de um RADIO BUTTON escolhido pelo USUÁRIO.

 

Como você pretende dar esse estimulo para o seu ORDER BY?

 

Espero ter ajudado.

 

Att.

Felipe Coutinho

Compartilhar este post


Link para o post
Compartilhar em outros sites

Link da página do projeto.

http://equipenovainfo.com.br/_portifolio/amanda/31_07_2019/resultado.php?categoria=Residencial

 

@Felipe Guedes Coutinho semelhantemente à sua linha SELECT, possuo uma variável para alternar essa ordem ASC ou DESC. Como pode ser visto no link, esse valor deve ser tanto passado e recebido na mesma página, o $filter por meio de um menu suspenso, e o $filter2 por button, a primeira variável até consegui pegar esse valor via GET ou POST, porém a segunda não, e isso só com PHP. Só que pelo fato do $filter não ter me dado dor de cabeça (pois ele recebe o valor vindo de um campo input), eu o defini com um valor constante, apenas para testar a $filter2. Deixarei o código abaixo, caso deseje dar uma olhada. Muito obrigado por me responderem e ajudarem. Tanto você como o @ShadowDLL. Darei uma lida melhor nos links deixados, pois só tive acesso ao PC agora!

 

<!DOCTYPE html>

    <html lang="pt-br">

    <?php require_once "include/head.php"; ?>
    
<body>
    
   <!-- INCLUI O HEADER (CABEÇALHO)-->
    
   <?php require_once "include/header.php";

      // VARIÁVEIS PARA FILTROS DE BUSCAS (APENAS PARA TESTES)
      $rel = "Relevância";
      $pre = "preco";
      $nom = "produto";
      $asc = "ASC";
      $desc = "DESC";
   ?>

   <div class="container">
      <div class="row my-5">
         <div class="col-sm-3 col-lg-4">
            <ul class="nav flex-column nav-bg-theme">
               <li class="nav-item">
                  <a class="nav-link active" href="#">Categoria</a>
               </li>
               <li class="nav-item">
                  <a class="nav-link ml-2" href="resultado.php?<?php echo $qs;?>categoria=Musculação">Musculação</a>
               </li>
               <li class="nav-item">
                  <a class="nav-link ml-2" href="resultado.php?<?php echo $qs;?>categoria=Profissional">Profissional</a>
               </li>
               <li class="nav-item">
                  <a class="nav-link ml-2" href="resultado.php?<?php echo $qs;?>categoria=Semi-Profissional">Semi-Profissional</a>
               </li>
               <li class="nav-item">
                  <a class="nav-link ml-2" href="resultado.php?<?php echo $qs;?>categoria=Residencial">Residencial</a>
               </li>
            </ul>
         </div>

         <div class="col-sm-9 col-lg-8">
            <div class="d-flex justify-content-center">
               <?php
                  
                  $filter =  $pre;//(isset($_GET["ordSearch"])) ?: null;
                  $filter2 = (isset($_GET["orderBy"])) ?? null;

                  if(!empty($_POST["field-search"])){
                     $dataSearch = utf8_decode($fieldSearch = $_POST["field-search"]); // PEGA OS DADOS VIA CAMPO DE BUSCA
                     //  FAZ A BUSCA COM BASE NOS DADOS VINDO DE UM ARQUIVO
                  
                     $pegadados = $pdo->prepare("SELECT * FROM produtos WHERE categoria LIKE '%$dataSearch%' OR marca LIKE '%$dataSearch%' OR produto LIKE '%$dataSearch%' OR modelo LIKE '%$dataSearch%' OR descricao LIKE '%$dataSearch%' ORDER BY $filter $filter2");
                     // $pegadados->bindValue("categoria", $dataSearch, PDO::PARAM_STR);
                     // $pegadados->bindValue("marca", $dataSearch, PDO::PARAM_STR);
                     
                  }else{
                     $urlLink = $_GET["categoria"];
                     $dataSearch = utf8_decode($urlLink); // PEGA OS DADOS VIA URL
                     //  FAZ A BUSCA COM BASE NOS DADOS VINDO DE UM ARQUIVO
                  
                     $pegadados = $pdo->prepare("SELECT * FROM produtos WHERE categoria='{$dataSearch}'");
                     $pegadados->bindValue("categoria", $dataSearch, PDO::PARAM_STR);
                  }
                  if(isset($dataSearch)){          
               ?>
                   
              <div class="row border-theme-ressearch w-100">
                 <div class="item w-100">
                    <ul class="nav">
                       <li class="nav-link p-0">
                          <a href="#" class="navTitle rounded-0 nav-item nav-link active text-uppercase">Resultados para <?php if (isset($_POST["field-search"])){ echo $_POST["field-search"]; } else{ echo $urlLink;}?></a>
                       </li>
                    </ul>
                    <div class="text-right text-uppercase pt-2" style="border-top: 2px solid #d3ced2; border-bottom: 2px solid #d3ced2;">
                     
                       <label for="ordSearch">Ordernar por</label>
                       <select class="border-theme-ressearch" name="ordSearch" id="ordSearch">
                          <option value="<?php echo $rel;?>">Relevância</option>
                          <option value="<?php echo $pre;?>">Preço</option>
                          <option value="<?php echo $nom;?>">Nome</option>
                       </select>
                       <i class="btn btn-sm mb-1 mr-1 fas fa-arrow-up" id="arrowup"></i>
                    </div>
                    <div class="d-flex-inline flex-row flex-wrap">
                       <div id="carouselProd" class="carousel slide" data-ride="carousel">
                       <div class="carousel-inner">
                          <div class="carousel-item d-inline-flex flex-row flex-wrap justify-content-around active">
                             <?php
                                
                                $pegadados->execute();
                          
                                $recebedados = $pegadados->fetchAll(PDO::FETCH_OBJ);
                                foreach($recebedados as $passadados){
                                
                                   echo"
                                   <div class='col-sm-6 col-md-12 col-lg-3 my-3 mx-3 justify-content-center d-flex' style='widht: auto !important; height: 385px !important;'>
                                            <div class='item'>
                                               <div class='photo'>{$filter2}
                                                   <a href='detalhes.php?{$qs}id=$passadados->id'>
                                                     <img src='{$path}' class='img-fluid' alt='a'/>
                                                   </a>
                                               </div>
                                               <div class='info'>
                                                     <div class='row'>
                                                        <div class='price col-md-12'>
                                                           <h5 class='text-center mb-2'>
                                                                 $passadados->produto</h5>
                                                           <h5 class='price-text-color text-center mb-3'>
                                                                 R$$passadados->preco<br>$passadados->modelo</h5>
                                                        </div>     
                                                     </div>
                                                     <div class='separator clear-left'>
                                                        <p class='mt-4 d-flex justify-content-center'>
                                                           <a href='http://www.jquery2dotnet.com' class='hidden-sm btn btn-outline-warning '>Adicionar ao Orçamento</a>
                                                        </p>
                                                     </div>
                                                     <div class='clearfix'>
                                               </div>
                                               </div>
                                            </div>
                                         </div>
                                   ";}}else{
                                      require_once "sem-resultado.php";
                                   }?> <!-- fim card -->
                          </div>
                       </div>
                    </div>
                    </div>
                 </div>
              </div>
            </div>
         </div>
      </div>  
   </div>

   <?php require_once "propaganda.php"; ?>
   <?php require_once "include/footer.php"; ?>
   <script>
      $('#arrowup').click(function(){
         $(this).toggleClass('fas fa-arrow-down');
         $(this).toggleClass('fas fa-arrow-up');
      });
      
      $document.ready(function(){
         $('[data-spy="scroll"]').each(function () {
            var $spy = $(this).scrollspy('refresh')
         }); 
      });
   </script>
</body>
</html>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DinhoPHP só uma dúvida, entendi que você quer fazer o order by "dinâmico", porem você pode me explicar as condições para que isso aconteça, por exemplo: cliquei no botão buscar, vai vir ASC, ai eu clico em outro botão vem DESC.

 

Ou, se eu digitar uma busca por nome quero ASC, se eu colocar nome e data quero desc.

 

Entende? Preciso saber quais são as condições do seu sistema para que uma hora venha com o ORDER BY ASC e em outra hora venha com o ORDER BY DESC... para tentar entender melhor o que você está precisando.

Pois pelo o que eu estou vendo o seu problema nem é o ORDER BY e sim como implementar no seu sistema as condições para isso.

 

Att.

Felipe Coutinho

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso! É implementar. Existe um botão na página do resultado da busca, na qual, apenas precisa alterar o ASC ou DESC mantendo os mesmos resultados. Entendeu? Olha o link que eu deixei por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DinhoPHP, então, é como eu falei, o site exemplo que você mandou tem um COMBOBOX e um RADIOBUTTON em forma de SETA PARA CIMA E SETA PARA BAIXO, então okay o COMBOBOX, você simplesmente pega o VALUE dele que é o option selecionado e passa para a sua variável PHP que eu acredito ser o $FILTER, já o caso do RADIOBUTTON você também vai pegar o VALUE mas no caso, você vai pegar o VALUE do RADIO CHECADO, como você vai ter 2 RADIOBUTTON, cada um deles vai ter um VALUE diferente, um VALUE="ASC" e o outro VALUE="DESC", veja o exemplo abaixo:

 

<html>
<meta charset="UTF-8">
<meta name="keywords" content="SELECT, Ordenação, Order By, MySQL">
<meta name="description" content="EXEMPLO ORDENAÇÃO">
<meta name="author" content="Felipe Coutinho">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Exemplo Order By</title>
<body>
<form method="POST" action="#">
    <table>
        <tr><td>
            <select name="produto" onchange="javascript:submit();">
     <?php if (!empty($_POST['produto'])) {
               if ($_POST['produto'] == "PREÇO") { ?>
                <option value='PREÇO' selected>Preço</option>
     <?php     } else { ?>
                <option value='PREÇO'>Preço</option>
     <?php     }
			   if ($_POST['produto'] == "RELEVÂNCIA") { ?>
                <option value='RELEVÂNCIA' selected>Relevância</option>
     <?php     } else { ?>
                <option value='RELEVÂNCIA'>Relevância</option>
     <?php     }
               if ($_POST['produto'] == "NOME") { ?>
                <option value='NOME' selected>Nome</option>
     <?php     } else { ?>
                <option value='NOME'>Nome</option>
     <?php     }
	        } else { ?>
                <option value='PREÇO'>Preço</option>
                <option value='RELEVÂNCIA' selected>Relevância</option>
                <option value='NOME'>Nome</option>
     <?php } ?>
            </select> - 
     <?php if (!empty($_POST['ordenacao'])) {
               if ($_POST['ordenacao'] == "ASC") { ?>
			<input type="radio" name="ordenacao" value="ASC" onclick="javascript:submit();" checked /> ASC <input type="radio" name="ordenacao" value="DESC" onclick="javascript:submit();" /> DESC
     <?php     } 
               if ($_POST['ordenacao'] == "DESC") { ?>
			<input type="radio" name="ordenacao" value="ASC" onclick="javascript:submit();" /> ASC <input type="radio" name="ordenacao" value="DESC" onclick="javascript:submit();" checked /> DESC
     <?php     }
           } else { ?>
			<input type="radio" name="ordenacao" value="ASC" onclick="javascript:submit();" checked /> ASC <input type="radio" name="ordenacao" value="DESC" onclick="javascript:submit();" /> DESC
     <?php } ?>
        </td></tr>
    </table>
</form>
<?php
echo "O select será ordenado pela coluna: ";
if(!empty($_POST['produto'])) {
    echo $_POST['produto'];
}
echo "<br>";
echo " Será ordenado de forma: ";
if(!empty($_POST['ordenacao'])) {
    echo $_POST['ordenacao'];
}
if(!empty($_POST['produto']) and !empty($_POST['ordenacao'])) {
    echo "<br> O seu SELECT deve ficar assim: <br><br> select * from nome_sua_tabela ORDER BY <font color='red'>".$_POST['produto']." ".$_POST['ordenacao']."</font>";
}
?>
</body>
</html>

Eu não tive o trabalho de alterar os RADIO pelas imagens de SETAS, acho que você entendeu o que deve ser feito.

Eu acho que no site que você mandou de exemplo existe um RadioButton em DIV's diferentes e ao clicar na seta ele esconde uma e mostra a outra com efeito de JavaScript , sendo que ao carregar a página na primeira vez uma já começa escondida.

 

Qualquer coisa da uma busca aqui no forum que eu já fiz algo parecido para um membro daqui.

 

Se a minha resposta for útil não esqueça de agradecer e votar positivo.

Espero ter ajudado de alguma forma.

 

Att
Felipe Guedes Coutinho

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DinhoPHP fera, fiz exatamente o que você pediu no site que mandou, segue o resultado abaixo:

 

Para o seu teste, apenas coloque 2 imagens de seta uma para cima e outra para baixo junto com o arquivo e altera no código todos os UP.PNG e DOWN.PNG (PNG que são só as imagens, não vai alterar os NAME nem os ID's) e teste para ver se funciona:

 

<html>
<meta charset="UTF-8">
<meta name="keywords" content="SELECT, Ordenação, Order By, MySQL">
<meta name="description" content="EXEMPLO ORDENAÇÃO">
<meta name="author" content="Felipe Coutinho">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Exemplo Order By</title>
<body>

<style>
/* HIDE RADIO */
[type=radio] { 
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

/* IMAGE STYLES */
[type=radio] + img {
  cursor: pointer;
}

/* CHECKED STYLES */
[type=radio]:checked + img {
  outline: 2px solid #f00;
}
</style>
<script>
function exibir() {
	var carregar = document.getElementsByName('ordenacao');
	if(carregar[0].checked==true){
        document.getElementById('up').style.visibility='hidden';
        document.getElementById('up').style.display='none';
        document.getElementById('down').style.visibility='visible';
        document.getElementById('down').style.display='';
	}
	if(carregar[1].checked==true){
        document.getElementById('up').style.visibility='visible';
        document.getElementById('up').style.display='';
        document.getElementById('down').style.visibility='hidden';
        document.getElementById('down').display='none';
	}
}
</script>
<form method="POST" action="#">
    <table>
        <tr><td>
            <div style="float:left;">
            <select name="produto" onchange="javascript:submit();">
     <?php if (!empty($_POST['produto'])) {
               if ($_POST['produto'] == "PREÇO") { ?>
                <option value='PREÇO' selected>Preço</option>
     <?php     } else { ?>
                <option value='PREÇO'>Preço</option>
     <?php     }
			   if ($_POST['produto'] == "RELEVÂNCIA") { ?>
                <option value='RELEVÂNCIA' selected>Relevância</option>
     <?php     } else { ?>
                <option value='RELEVÂNCIA'>Relevância</option>
     <?php     }
               if ($_POST['produto'] == "NOME") { ?>
                <option value='NOME' selected>Nome</option>
     <?php     } else { ?>
                <option value='NOME'>Nome</option>
     <?php     }
	        } else { ?>
                <option value='PREÇO'>Preço</option>
                <option value='RELEVÂNCIA' selected>Relevância</option>
                <option value='NOME'>Nome</option>
     <?php } ?>
            </select> </div>
     <?php if (!empty($_POST['ordenacao'])) {
               if ($_POST['ordenacao'] == "ASC") { ?>
			       <div name="up" id="up" style="visibility:hidden;float:left;display:none">
                       <label>
                           <input type="radio" name="ordenacao" id="ordenacao" value="ASC" onclick="javascript:submit();" onChange="exibir()" checked="checked" />
                           <img src="up.png" width="18" height="18" >
                       </label>
                   </div>
                   <div name="down" id="down" style="float:left;">
                       <label>
                           <input type="radio" name="ordenacao" id="ordenacao" value="DESC" onclick="javascript:submit();" onChange="exibir()" />
                           <img src="down.png" width="18" height="18" >
                       </label>
                   </div>
     <?php     } 
               if ($_POST['ordenacao'] == "DESC") { ?>
			       <div name="up" id="up" style="float:left;">
                       <label>
                           <input type="radio" name="ordenacao" id="ordenacao" value="ASC" onclick="javascript:submit();" onChange="exibir()" />
                           <img src="up.png" width="18" height="18" >
                       </label>
                   </div>
                   <div name="down" id="down" style="visibility:hidden;float:left;display:none" >
                       <label>
                           <input type="radio" name="ordenacao" id="ordenacao" value="DESC" onclick="javascript:submit();" onChange="exibir()" checked="checked" />
                           <img src="down.png" width="18" height="18" >
                       </label>
                   </div>
     <?php     }
           } else { ?>
			       <div name="up" id="up" style="visibility:hidden;float:left;display:none">
                       <label>
                           <input type="radio" name="ordenacao" id="ordenacao" value="ASC" onclick="javascript:submit();" onChange="exibir()" checked="checked" />
                           <img src="up.png" width="18" height="18" >
                       </label>
                   </div>
                   <div name="down" id="down" style="float:left;" >
                       <label>
                           <input type="radio" name="ordenacao" id="ordenacao" value="DESC" onclick="javascript:submit();" onChange="exibir()" />
                           <img src="down.png" width="18" height="18" >
                       </label>
                   </div>
     <?php } ?>
        </td></tr>
    </table>
</form>
<?php
echo "O select será ordenado pela coluna: ";
if(!empty($_POST['produto'])) {
    echo $_POST['produto'];
}
echo "<br>";
echo " Será ordenado de forma: ";
if(!empty($_POST['ordenacao'])) {
    echo $_POST['ordenacao'];
}
if(!empty($_POST['produto']) and !empty($_POST['ordenacao'])) {
    echo "<br> O seu SELECT deve ficar assim: <br><br> select * from nome_sua_tabela ORDER BY <font color='red'>".$_POST['produto']." ".$_POST['ordenacao']."</font>";
}
?>
</body>
</html>

Se a minha resposta for útil não esqueça de agradecer e votar positivo.

Espero ter ajudado de alguma forma.

 

Att
Felipe Guedes Coutinho

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigadão fera! @Felipe Guedes CoutinhoEu estava aqui seguindo com outras partes do projeto, pois faltam essa e adição do produto na lista de orçamento (quase finalizado). Fez um baita código hein! As setas eu estava utilizando o Fontawesome. Vou testar já, já! Estou votando, está recebendo o voto? Pois quando voto eu recebo mensagem de erro. Abração!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.