Ir para conteúdo

POWERED BY:

Arquivado

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

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

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo certo?
       
      Seguinte: No servidor A estou tentando fazer uma consulta com o servidor B, mas está dando erro.
      Estou usando o mesmo código de conexão do servidor B que funciona perfeitamente, mas no servidor A, dá erro.
      Segue código:
       
      $host = 'servidor B';
      $user = 'user';
      $pass = '********';
      $db   = 'banco';
       
      // conexão e seleção do banco de dados
      $conexao = mysqlI_connect($host, $user, $pass, $db);
      mysqlI_set_charset($conexao,"utf8");
      //print "Conexão rodando e OK!"; 
      //mysqlI_close($conexao);
       
      Alguém pode me ajudar?
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
×

Informação importante

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