Para você entender melhor este post, você precisa ter uma boa noção de como fazer consultas em uma tabela do MySQL. Sabendo disso, vamos começar a melhorar a nossa consulta, ordenando de acordo com as colunas, sejam ela de forma crescente ou decrescente.
A nossa sintaxe utilizada juntamente com o SELECT é o “ORDER BY“:
SELECT nomedascolunas FROM nomedatabel ORDER BY nomedacoluna ASC/DESC;
Então vamos aos exemplos. Supondo que eu queira fazer uma consulta numa tabela chamada “clientes” e quero pegar somente os nomes e número de telefones deles, mas que seja ordenado pelo nome de forma crescente, ou seja, de A até Z, devemos executar o seguinte SQL:
SELECT nome,telefone FROM `clientes` ORDER BY nome;
Você deve ter percebido que na sintaxe que eu passei, estou informando logo após o nome da coluna para botar ASC ou DESC, mas que não botei neste comando de exemplo. Realmente não botei pelo simples fato de, por padrão, o MySQL já realiza a consulta de forma crescente, mas que não atrapalha em nada você acrescentar o ASC no final do comando, ficando assim:
SELECT nome,telefone FROM `clientes` ORDER BY nome ASC;
O resultado seria esse:
Ana | 1111-1111 André | 3333-3333 Antônio | 2222-2222 Diego | 4444-4444 Diogo | 5555-5555 João | 8888-8888 José | 7777-7777 Maria | 6666-6666 ...
Caso a gente queira fazer o inverso na ordenação dos dados, ou seja, fazer a consulta de forma decrescente (de Z até A), devemos utilizar o DESC:
SELECT nome,telefone FROM `clientes` ORDER BY nome DESC;
O resultado seria esse:
Maria José João Diogo Diego Antônio André Ana ...
Agora que já aprendemos como ordenar uma coluna, vamos ver como faremos para ordenar duas delas.
Suponha que temos a seguinte tabela “FUNCIONÁRIOS”:
- id_funcionario
- id_setor
- nome
Queremos fazer uma consulta para pegar os nomes ordenados de forma crescente, mas separados por setor também de forma crescente pelo id_setor:
SELECT id_setor,nome FROM `funcionarios` ORDER BY `id_setor` ASC,`nome` ASC;
O resultado seria isso:
ID_SETOR | NOME 1 | Antônio 1 | Diego 1 | Marcelo 2 | Maria 2 | Maurício 2 | Ricardo 2 | Tiago 3 | João 3 | José 3 | Tânia 4 | Ana 4 | Antônio 5 | Josefa 5 | Victor
Caso você queira, pode alterar a ordem de cada coluna, elas não precisam ser necessariamente a mesma. Veja outros exemplos:
SELECT id_setor,nome FROM `funcionarios` ORDER BY `id_setor` ASC,`nome` DESC; SELECT id_setor,nome FROM `funcionarios` ORDER BY `id_setor` DESC,`nome` DESC; SELECT id_setor,nome FROM `funcionarios` ORDER BY `id_setor` DESC,`nome` ASC;
Espero que tenha sido útil e bem claro nas explicações. Um abraço. Não deixe de comentar e dar seu voto! 🙂
id_setor,nome
Bom dia diogo
entendi muito bem com a sua explicação esta muito clara e simples ,
agora por favor da-me uma ajuda tenho um formulario simples com nome,telefone,provincia email pretendo que os dados sejam enviados no meu email da gmail , pode me ajudar neste sentido , ja vi muitas dicas não funciona , mas como tu tens umas explicações simples e claras estou confiante que a tua ajuda será boa .
aguardo tua ajuda
amilton
abraço
Preciso de uma grande ajuda com php. Sou novo em programação orientado a objetos, com ajuda de algumas pessoas tenho conseguido fazer um site onde trabalho de patrimônio, e tentado seguir umas regras de programação sempre que posso.
Tenho visto alguns exemplos de como ordenar colunas, mas não consigo colocar no meu, pois tenho procurado seguir conselhos de algumas pessoas na área de PHP e deixado meu site legalzinho, mas não vejo como colocar certo código dentro do meu, que são por meio de referência e parâmetros, mas certas coisas ainda tenho dificuldade ai da que parecer ser pouco, segue abaixo um pouco do meu código.
em controllers list.php
query(‘DELETE FROM usuarios WHERE id=’.$id);
if ($sqli->error) {
// exibe o erro na tela:
$msg[]=’Falha ao deletar cadastro: ‘ . $sqli->error . ”;
} else {
$msg[]=’Remoção efetuada com sucesso!’;
}
}
// apagar vários
if (isset($_POST[‘sel’])) {
$result = $sqli->query(‘DELETE FROM usuarios WHERE id in(‘ . implode(‘, ‘, $_POST[‘sel’]) . ‘)’);
// verificar se houve algum erro:
if ($sqli->error) {
// exibe o erro na tela:
$msg[]=’Falha ao deletar cadastro: ‘ . $sqli->error . ”;
}
}
$result = $sqli->query(‘SELECT id, nome, email, senha, situacoe_id,niveis_acesso_id,created, modified FROM usuarios order by id’);
Tentei algumas forma de como ordenar como sugere o artigo Tablesorter: Plugin jQuery para ordenar tabelas, mas não sei como ele não ordena, o código que coloquei esta sem as modificações que fiz.
Espero que me ajudem, pois ate agora ninguém me deu uma luz sobre isso.
Olá Joannes! Pelo seu SQL, você está ordenando pelo “id” e por padrão ele vai ordenar de forma crescente. Ou seja, de acordo com o que for sendo cadastro na sua tabela, ele vai colocando no final da lista. Se quiser inverter a ordem, altere o SQL assim: “SELECT id, nome, email, senha, situacoe_id,niveis_acesso_id,created, modified FROM usuarios order by id DESC”.
Bom dia Diego Macêdo, dessa forma eu sei fazer, mas minha chefe pediu para que possa ser feita com clique, em qualquer colunas, não tenho certeza se será feito do lado do servidor ou cliente, talvez seja do lado do servidor, então me dê um help, pois tenho pedido ajuda em outros lugares mas as pessoas não tem me ajudado.
desde já agradeço
Acredito que o plugin de JQuery vai te ajudar a fazer isto do lado do cliente. Chama-se DataTables. Veja o exemplo deles e só seguir a documentação. Boa sorte!
Sou estudante e tenho um trabalho a fazer podem me ajudar.
O trabalho é o seguinte:
1. Apresente todos os registros da tabela cliente e
ordene por nome (a-z);
2. Apresentar listagem do nome e da cidade de todos
clientes da província de Zambézia;
3. Apresentar nome e saldo dos clientes com valores na
conta entre 10.000,00 e 30.000,00;
4. Apresentar nome e saldo dos clientes com saldo vais
elevado do banco;
5. Apresentação de uma listagem ordenada por nomes
de clientes, mostrando a relação de contas que cada
um possui e seus respectivos valores.~
6. Listagem todas as contas existentes do cliente
“ISCIM”. Na listagem deve constar o nome do
cliente, o numero da conta e seu valor
correspondente.
7. Apresentar os nomes dos clientes e a data de
movimento de todas as contas do mês de setembro de
2015. A listagem deve ser apresentada na ordem
cronológica de movimento.
8. Apresentação do nome dos clientes e de todas as
contas que efectuaram movimento no mês de outubro
de qualquer ano.
Muito Obrigado
olá ele orgazina tudo certinho no mysql mais na minha pagina php ainda continua desorganizado poderia me ajudar?
Muito Obrigado!
Meu problema é o seguinte, eu preciso buscar no banco os últimos X registros.
Ok, eu coloco um ORDER BY id DESC LIMIT x
Só que na hora de exibir os resultados, eu preciso apresentá-los na ordem inversa, ou seja, preciso apresentar o resultado na ordem ASC.
Quando faço um loop com o mysql_fetch_array, os registros aparecem na ordem DESC.
Se eu fizer a pesquisa na ordem ASC, como preciso apresentar, eu não consigo pegar os últimos registros, mas sim os primeiros.
Alguma sugestão?
Se você tem uma chave primaria com INT em AUTO INCREMENTO faz uma consulta pelo maior id da tabela e faz um WHERE limitando aos últimos registros e usa o ORDER BY id ASC para listar certinho
SELECT temp.*
FROM
(SELECT
*
FROM locais
ORDER BY id_local DESC
LIMIT 3) as temp
ORDER BY temp.id_local