При выводе данных из базы необходимо предусмотреть возможность их сортировки по различным критериям. В качестве примера рассмотрим результаты, выведенные нашей поисковой системой, — обратим особое внимание на следующие после заголовка Order History:(История заказов). Допустим, список получился очень длинным, и вы хотите отсортировать данные по идентификатору товара(или идентификатору заказа). Чтобы вы лучше поняли, о чем идет речь, рекомендую посетить один из моих любимых сайтов, http://download.cnet.com. Если в процессе просмотра программ конкретной категории щелкнуть на заголовке столбца(название, дата размещения, количество загрузок или размер файла), то список автоматически упорядочивается по содержимому указанного столбца. Далее показано, как реализовать подобную возможность.
В листинге 11.6 мы производим выборку данных из таблицы orders. По умолчанию данные сортируются по убыванию объема заказа(поле quantity). Однако щелчок на любом заголовке таблицы приводит к тому, что страница загружается заново с упорядочением таблицы по указанному столбцу.
Листинг 11.6. Сортировка таблиц(tablesorter.php)
<?
// Подключиться к серверу MySQL и выбрать базу данных
@mysql_connect("localhost","web","ffttss") or die("Could not connect to MySQL server!");
@mysql_select_db("company") or die("Could not select company database!");
// Если значение переменной $key не задано, по умолчанию
// используется значение 'quantity'
if(! isset($key)) :
$key = "quantity";
endif;
// Создать и выполнить запрос.
// Выбранные данные сортируются по убыванию столбца $key
$query = "SELECT order_id, cust_id, prod_id, quantity FROM orders ORDER BY $key DESC" $result = mysql_query($query);
// Создать заголовок таблицы
print "<table border = 1>";
print "<tr>
<th><a href=\"Listing11-6.php?key=order_id\">Order ID</a></th>
<th><a href=\"Listing11-6.php?key=cust_id\">Customer ID</a></th>
<th><a href=\"Listing11-6.php?key=prod_id\">Product ID</a></th>
<th><a href=\"Listing11-6.php?key=quantity\">Quantity</a>
</th></tr>";
// Отформатировать и вывести каждую строку таблицы
while(list($order_id,$cust_id,$prod_id, $quantity) = mysql_fetch_row($result)) :
print "<tr>";
print "<td>$order_id</td><td>$cust_id</td><td>$prod_id</td><td>$quantity</td>";
print "</tr>";
endwhile;
// Завершить таблицу
print "</table>";
Для базы данных company, изображенной на рис. 11.1, стандартные выходные данные листинга 11.6 выглядят следующим образом:
Order ID
Customer ID
Product ID
Quantity
100003
2000cu
1000pr
12
100005
2000cu
1002pr
11
100004
2000cu
1000pr
9
100002
2000cu
1001pr
5
100001
2000cu
1002pr
3
Обратите внимание: заголовки таблицы представляют собой гиперссылки. Поскольку по умолчанию сортировка осуществляется по полю quantity, записи отсортированы по убыванию последнего столбца. Если щелкнуть на ссылке Order_ID, страница загружается заново, но на этот раз записи сортируются по убыванию идентификатора заказа. Таблица будет выглядеть так:
Order ID
Customer ID
Product ID
Quantity
100005
2000cu
1002pr
11
100004
2000cu
1000pr
9
100003
2000cu
1000pr
12
100002
2000cu
1001pr
5
100001
2000cu
1002pr
3
Сортировка выходных данных приносит огромную пользу при форматировании баз данных. Простая модификация запроса SELECT позволяет упорядочить данные по любому критерию — по возрастанию, по убыванию или с группировкой записей.
На этом наше знакомство с MySQL подходит к концу. Учтите, что материал этой главы отнюдь не исчерпывает всего, что необходимо знать о MySQL. Полный список команд MySQL в РНР приведен в документации(http://www.php.net/manuat).