Предложение ORDER BY PHP MySQL
В этом уроке вы узнаете, как с помощью PHP сортировать и отображать данные из таблицы MySQL в порядке возрастания или убывания.
Фильтрация записей в порядке возрастания или убывания
Предложение ORDER BY
используется для сортировки набора результатов в порядке возрастания или убывания.
Предложение ORDER BY
по умолчанию сортирует записи в порядке возрастания. Чтобы отсортировать записи в порядке убывания, используйте ключевое слово DESC
:
Код РНР сортировки записей в алфавитном порядке
Давайте сделаем SQL-запрос, используя предложение ORDER BY
, после чего мы выполним этот запрос, передав его функции PHP mysqli_query()
для получения упорядоченных данных. Рассмотрим следующую таблицу persons в базе данных demo:
Код РНР в следующем примере выбирает все строки из таблицы persons и сортирует результат в столбце first_name в алфавитном порядке возрастания:
<?php
/* Попытка подключения к серверу MySQL. Предполагая, что вы используете MySQL
сервер с настройками по умолчанию (пользователь root без пароля) */
$link = mysqli_connect("localhost", "root", "", "demo");
// Проверьте подключение
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
// Попытка выполнения запроса select с предложением order by
$sql = "SELECT * FROM persons ORDER BY first_name";
if($result = mysqli_query($link, $sql)){
if(mysqli_num_rows($result) > 0){
echo "<table>";
echo "<tr>";
echo "<th>id</th>";
echo "<th>first_name</th>";
echo "<th>last_name</th>";
echo "<th>email</th>";
echo "</tr>";
while($row = mysqli_fetch_array($result)){
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['first_name'] . "</td>";
echo "<td>" . $row['last_name'] . "</td>";
echo "<td>" . $row['email'] . "</td>";
echo "</tr>";
}
echo "</table>";
// Закрываем набор результатов
mysqli_free_result($result);
} else{
echo "Не найдено ни одной записи, соответствующей вашему запросу.";
}
} else{
echo "ОШИБКА: не удалось выполнить $sql. " . mysqli_error($link);
}
// Закрываем соединение
mysqli_close($link);
?>
Результат выполнения скрипта будет выглядеть примерно так:
+----+------------+-----------+----------------------+ | id | first_name | last_name | email | +----+------------+-----------+----------------------+ | 3 | Clark | Kent | clarkkent@mail.com | | 5 | Harry | Potter | harrypotter@mail.com | | 2 | John | Rambo | johnrambo@mail.com | | 4 | John | Carter | johncarter@mail.com | | 1 | Peter | Parker | peterparker@mail.com | +----+------------+-----------+----------------------+
Объяснение кода из приведенного выше примера:
Сначала мы настраиваем SQL-запрос, который выбирает столбцы id, first_name, last_name и email из таблицы persons. Записи будут отсортированы по столбцу first_name. Следующая строка кода выполняет запрос и помещает полученные данные в переменную с именем $result.
Затем функция mysqli_num_rows()
проверяет, было ли возвращено строк больше нуля.
Если возвращается более нуля строк, функция mysqli_fetch_array
помещает все результаты в ассоциативный массив, который мы можем просмотреть. В цикле while()
через результирующий набор выводятся данные из столбцов id, first_name, last_name и email.
Выборка данных стиле PDO (+ подготовленные операторы)
В следующем примере используются подготовленные операторы.
Он выбирает столбцы id, first_name, last_name и email из таблицы persons, где last_name='Carter', и отображает их в таблице HTML:
Пример
Скопировать<?php
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Имя</th><th>Фамилия</th><th>E-mail</th></tr>";
class TableRows extends RecursiveIteratorIterator {
function __construct($it) {
parent::__construct($it, self::LEAVES_ONLY);
}
function current() {
return "<td style='width: 150px; border: 1px solid black;'>" . parent::current(). "</td>";
}
function beginChildren() {
echo "<tr>";
}
function endChildren() {
echo "</tr>" . "\n";
}
}
$serverName = "localhost";
$userName = "root";
$password = "";
$dbName = "demo";
try {
$conn = new PDO("mysql:host=$serverName;dbname=$dbName", $userName, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT id, first_name, last_name, email FROM persons ORDER BY last_name");
$stmt->execute();
// поместить результат в ассоциативный массив
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
}
}
catch(PDOException $e) {
echo "Ошибка: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>
Результат выполнения кода:
Id | Имя | Фамилия | |
---|---|---|---|
4 | John | Carter | johncarter@mail.com |
3 | Clark | Kent | clarkkent@mail.com |
1 | Peter | Parker | peterparker@mail.com |
5 | Harry | Potter | harrypotter@mail.com |
2 | John | Rambo | johnrambo@mail.com |
6 | Ron | Weasley | ronweasley@mail.com |