Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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");
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/
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***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>@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
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.
@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***@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***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!
@DinhoPHP e ai fera, funcionou ?
.