30 dniowy kurs php – dzień 28 – MySQL ORDER BY


Back-end (php, mysql)

ORDER BY to rozwinięcie polecenia SELECT, dzięki któremu możesz posortować wyświetlane dane z Twojej bazy. Co najważniejsze jest to sortowanie alfanumeryczne czyli możesz posortować rekordy od A do Z jak również od 1 do 99999… ORDER BY ma również dodatkową opcję sortowania rosnąco lub malejąco. Te dodatkowe polecenia to ASC i DESC. Oto jak wygląda kompletne zapytanie z użyciem ORDER BY:

SELECT * FROM (nazwa tabeli) ORDER BY (nazwa kolumny) ASC lub DESC.

Domyślne sortowanie to sortowanie rosnące czyli od najmniejszego do największego. Możesz więc pominąć dopisywanie ASC. Jeśli natomiast chcesz odwrócić kolejność sortowania dopisz DESC.

Poniżej praktyczny przykład, w którym sortujemy rekordy po kolumnie Wiek.

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>MySQL SELECT</title>
</head>
<body>

<?php
$serwer = 'localhost';
$uzytkownik = 'root';
$haslo = 'hasloZphpmyadmina';

// ustanawiamy połączenie
$polaczenie = mysql_connect($serwer, $uzytkownik, $haslo);

// wybieramy bazę
mysql_select_db('baza', $polaczenie) or die ('Error: ' . mysql_error());

// ustawiamy kodowanie znaków wychodzących z bazy
mysql_query("SET NAMES 'utf8'");

// sortujemy wpisy w tabeli po kolumnie Wiek
$wyniki = mysql_query("SELECT * FROM ludzie ORDER BY Wiek");

// tworzymy tabelę html z nagłówkami
echo '
<table border="1">
<tr>
<th>Imię</th>
<th>Wiek</th>
</tr>
';

// generujemy wpisy z bazy jako komórki tabeli
while($kolumna = mysql_fetch_array($wyniki))
{
 echo "<tr>";
 echo "<td>" . $kolumna['Imie'] . "</td>";
 echo "<td>" . $kolumna['Wiek'] . "</td>";
 echo "</tr>";
}

mysql_close($polaczenie);
?>

</body>
</html>

Inny przykład. Posortujmy dane malejąco biorąc pod uwagę kolumnę Imie. W powyższym skrypcie podmień 24 linijkę:

$wyniki = mysql_query("SELECT * FROM ludzie ORDER BY Wiek");

na

$wyniki = mysql_query("SELECT * FROM ludzie ORDER BY Imie DESC");

zobaczysz tabelę posortowaną według imion od Z do A.

Jeśli w bazie znajdą się rekordy z takimi samymi wpisami w danej kolumnie, czyli będzie np. kilku Andrzejów, wiele osób w wieku 20 lat etc. możesz wybrać drugą kolumnę do sortowania. Przykład:

$wyniki = mysql_query("SELECT * FROM ludzie ORDER BY Wiek, Imie");

W ten sposób wyniki będą posortowane najpierw według kolumny Wiek. W miejscach gdzie wiek będzie identyczny zostanie użyte sortowanie według kolumny Imie.