Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá. Preciso fazer uma consulta MySql em PHP para listar uma espécie de ranking, porém quando uso o código para listar por ordem decrescente ele lista da seguinte maneira:
80
70
30
100
E preciso que ele liste assim:
100
80
70
30
O código PHP:
<?php
include("conexao.php");
$sql = mysqli_query($conexao, "SELECT * FROM ranking ORDER BY `pontuacao` DESC") or die( mysqli_error($conexao) );
while($aux = mysqli_fetch_assoc($sql)) {
echo "<tr>";
echo "<td>".$aux["nome"]."</td>";
echo "<td>".$aux["data"]."</td>";
echo "<td>".$aux["pontuacao"]."%</td>";
}
?>
Agradeço a quem ajudarIsso está ocorrendo pois o conteúdo está sendo ordenado como texto, provavelmente o campo no banco é do tipo VARCHAR(ou outro que armazene texto).
Você pode corrigir o problema alterando o tipo do banco para INTEGER ou DECIMAL dependendo do tipo de valor que você armazena.
Uma alternativa menos eficiente seria converter o valor do campo para um tipo numérico na ordenação.
SELECT * FROM ranking ORDER BY CAST(`pontuacao` AS UNSIGNED) DESC
Substitua *UNSIGNED* por *SIGNED* caso o campo possa possuir valores negativos ou *DECIMAL* caso o campo possuir casas demais.>
11 horas atrás, HwapX disse:
Isso está ocorrendo pois o conteúdo está sendo ordenado como texto, provavelmente o campo no banco é do tipo VARCHAR(ou outro que armazene texto).
Você pode corrigir o problema alterando o tipo do banco para INTEGER ou DECIMAL dependendo do tipo de valor que você armazena.
Uma alternativa menos eficiente seria converter o valor do campo para um tipo numérico na ordenação.
SELECT * FROM ranking ORDER BY CAST(`pontuacao` AS UNSIGNED) DESC
Substitua *UNSIGNED* por *SIGNED* caso o campo possa possuir valores negativos ou *DECIMAL* caso o campo possuir casas demais.
Era realmente isso. Funcionou bem aqui, valeu!
Tudo parece funcionar para mim.
Poderia por favor mostrar a estrutura da sua tabela ranking?