- Подробности
-
Категория: PHP. Базы данных
Сортировка результатов SQL-запроса
Сортировка результатов SQL-запроса производится при помощи конструкции ORDER BY, после которой указывается имя столбца, который подвергается сортировке. Если после имени столбца указано ключевое слово ASC, сортировка производится по возрастанию, если же указано ключевое слово DESC, то сортировка будет по убыванию. Таким образом, задача сводится к динамическому формированию SQL-запроса, в конструкцию ORDER BY которого подставлялись бы имена выбранных столбцов и порядок сортировки. Для этого будем использовать запрос вида
$query = "SELECT * FROM products WHERE 1 ORDER BY ".$orderby." ".$sort;
где переменная $orderby будет содержать имя столбца, а $sort принимать значение ASC или DESC, в зависимости от того, какой вид сортировки выбран.
<?php
$dblocation = "localhost"; // Имя сервера
$dbuser = "root"; // Имя пользователя
$dbpswrd = ""; // Пароль
$dbname = "catalog"; // Имя базы данных
// Соединение с сервером базы данных
$dblink = mysql_connect( $dblocation, $dbuser, $dbpswrd );
mysql_query( 'SET NAMES cp1251' );
// Выбираем базу данных
mysql_select_db( $dbname, $dblink );
// По умолчанию сортировка по наименованию, по возрастанию
$orderby = 'title';
$sort = 'ASC';
if ( isset( $_GET['orderby'] ) and isset( $_GET['sort'] ) ) {
if ( in_array( $_GET['orderby'], array( 'code', 'title', 'price' ) ) ) $orderby = $_GET['orderby'];
if ( in_array( $_GET['sort'], array( 'ASC', 'DESC' ) ) ) $sort = $_GET['sort'];
}
$query = 'SELECT code, title, description, price
FROM products
ORDER BY '.$orderby.' '.$sort;
$res = mysql_query( $query );
echo '<h1>Каталог продукции</h1>'."n";
// Выводим "шапку" таблицы
echo '<table border="1" cellpadding="4" cellspacing="0" style="border-collapse: collapse; empty-cells: show">'."n";
echo '<tr>';
if ( $sort == 'ASC' ) {
$tmp = 'DESC';
$image = 'down.gif';
} else {
$tmp = 'ASC';
$image = 'up.gif';
}
if ( $orderby == 'code' )
echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=code&sort='.$tmp.'">Код</a> <img src="'.$image.'" alt="" /></th>';
else
echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=code&sort=ASC">Код</a></th>';
if ( $orderby == 'title' )
echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=title&sort='.$tmp.'">Наименование</a> <img src="'.$image.'" alt="" /></th>';
else
echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=title&sort=ASC">Наименование</a></th>';
echo '<th>Описание</th>';
if ( $orderby == 'price' )
echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=price&sort='.$tmp.'">Цена</a> <img src="'.$image.'" alt="" /></th>';
else
echo '<th><a href="'.$_SERVER['PHP_SELF'].'?orderby=price&sort=ASC">Цена</a></th>';
echo '</tr>'."n";
while( $prd = mysql_fetch_array( $res ) ) {
echo '<tr>';
echo '<td>'.$prd['code'].'</td>'."n";
echo '<td>'.$prd['title'].'</td>'."n";
echo '<td>'.$prd['description'].'</td>'."n";
echo '<td>'.$prd['price'].'</td>'."n";
echo '</tr>'."n";
}
echo '</table>'."n";
?>
Посмотреть рабочий пример можно здесь.