Сортировка массива SQL – выборки в PHP сценарии
Данная статья писалась как продолжение моей предыдущей статьи по php + mysql. Эта статья, для нормального усвоения, требует наличия базовых знаний в области работы с базами данных на php и принципом работы с СУБД MySQL (материала предыдущей статьи будет достаточно).
Первое, с чего начнем – сортировка массива SQL – выборки. Практически на всех современных сайтах предусмотрена возможность сортировки вывода записей (будь то дата публикации, количество просмотров, рейтинг и т.д.). Думаю удобство использования такой возможности не вызывает никаких сомнений.
В php существует 2 подхода к реализации данной функции:
сортировка sql-массива в процессе самой sql-выборки.
Осуществляется это по средствам параметра “ORDER BY” sql – запроса. Формат запроса будет следующий:
SELECT * FROM [таблица, с которой будет производиться выборка] ORDER BY [название столбца, по которому будет сортироваться массив] [способ сортировки (ASC (по возрастанию))/(DESC(по убыванию))].
Пример:
SELECT * FROM main ORDER BY name DESC.
В результате выполнения запроса, будет возвращено содержимое таблицы Main, отсортированное по столбцу Name, по убыванию.
сортировка уже готового массива.
Этот способ используется когда источником формирования массива не является база данных, либо когда есть необходимость снизить нагрузку на нее… Вообще, в php имеется более 70 функций для сортировки массивов. Их синтаксис можно посмотреть в официальной документации php ( http://www.php.com/manual/ru/ ).
После подготовки массива, как правило, возникает необходимость его вывода в определенном виде на сайте. Тут опять же есть несколько вариантов реализации. Если сайт не использует «шаблонизатор» для генерации html, то для вывода данных используется циклическая конструкция while. Пример кода может быть следующим
<?php
//массив записан в переменную $data
$index = 0;
$rows = count($data);
while ($index < $rows) {
echo $data[$index] . “<br>”;
$index++;
}
?>
Но вышеуказанный способ целесообразен лишь при отсутствии системы шаблонов на сайте, что по сегодняшним меркам является очень высоким недостатком для сайта. Так что думаю, есть смысл рассмотреть вывод массива данных и при использовании шаблонизатора. Для примера возьму наиболее популярный на сегодняшний день – Smarty.
Для Smarty необходимо рассмотреть 2 файла (обработчик и собственно сам шаблон).
Итак, обработчик. Сначала в нем нужно в нем нужно осуществить выборку из базы данных и «перегнать» ее в массив (Это уже рассматривалось в рамках данной серии статей). После того, как массив сформирован, необходимо передать его непосредственно в шаблон. Делается это посредствам функции $smarty->assign();
$smarty->assign(“DATA”,$data);
Теперь осталось вывести сам файл шаблона:
$smarty->display(“data.tpl”);
С обработчиком закончили, переходим непосредственно к самому шаблону (data.tpl). В шаблоне, для обозначения массива используется оператор {section}. Итак, пример:
<html>
<head>
<title>smarty</title>
</head>
<body>
<table>
{section name=i loop=$DATA}
<tr>
<td>{$DATA[i].id}</td>
<td>{$DATA[i].name}</td>
<td>{$DATA[i].date}</td>
</tr>
{/section}
</table>
</body>
</html>
Фактически, {section} представляет собой упрощенную конструкцию While в php. Т.е. все что находится между {select} и { /select } будет повторяться тоже количество раз что и количество строк в массиве, при этом переменные {$DATA[i].id}, {$DATA[i].name}, {$DATA[i].date} будут заменены соответствующими ячейками строки запроса (id, name и date соответственно).
По Smarty пожалуй все!
Последнее, что рассмотрим в рамках статьи – группировка и агрегирование вывода из mysql.
Зачем это надо!? Довольно часто web-разработчики сталкиваются с необходимостью, к примеру, подсчета количества строк какого-либо запроса, подсчета среднего показателя или стандартное отклонение значений в столбце. Бесспорно, все это можно подсчитать и стандартными средствами php, но не всегда целесообразно перегружать кодом свой сайт, да и в mysql это достигается куда проще.
Вот список этих функций:
- Avg – среднее значение
- Count – количество строк
- Min – минимальное значение
- Max – максимальное значение
- Std – стандартное отклонение
- Sum – сумма
Все вышеперечисленные функции являются параметрами SELECT запроса MySQL. Имеет примерно следующий формат записи:
select avg (coast) from main;
В результате выполнения вернется среднее значение столбца ‘coast’ таблицы ‘main’.
Вот и все, что я хотел поведать в рамках данной статьи! Удачи!

Добавить комментарий
Вы должны войти