| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Система "Совет дня". Часть 2
В прошлый раз я остановился на ситуации, когда в базе отсутствует совет дня, соответствующий текущей дате. В этом случае нужно выбрать самый поздний совет. Для этого используем следующий SQL-запрос: SELECT * FROM tipoad WHERE startdate < NOW() ORDER BY startdate DESC В переводе на русский это выглядит так: Выбрать все поля из таблицы tipoad, дата выхода которых меньше, чем текущая, отсортировав их в порядке убывания даты. Таким образом в первой строке результата у нас будет находиться информация об искомом совете. На php записываем это так. $sql = "SELECT * FROM tipoad WHERE startdate = NOW()";
$res = mysql_query($sql);
if (!(mysql_num_rows($res)>0)) {
$sql = "SELECT * FROM tipoad WHERE startdate < NOW() ORDER BY startdate DESC";
$res = mysql_query($sql);
}
$curTip = mysql_fetch_array($res);
В принципе, этот код избыточен. SQL-запрос можно заменить таким: SELECT * FROM tipoad WHERE startdate <= NOW() ORDER BY startdate DESC Таким образом в первой строке результата мы получим или совет на текущий день или самый поздний из доступных. Следовательно оптимизированный код будет выглядеть так: $sql = "SELECT * FROM tipoad WHERE startdate <= NOW() ORDER BY startdate DESC"; $res = mysql_query($sql); $curTip = mysql_fetch_array($res); Хорошим тоном в программировании считается проверка на правильность выполнения команд. Иначе, в случае ошибки, мы будем получать малоинформативные сообщения. Проверка осуществляется так: $res = mysql_query($sql) or die(mysql_error()); При использовании данной конструкции, в случае ошибки, буде остановлено выполнение скрипта и выдано сообщение о причине ошибки. Теперь необходимо разработать код для выдачи всех опубликованных на сегодняшний день советов. Для того, чтобы можно было просмотреть пропущенные или вернуться к уже просмотренным ранее. Для этого можно использовать тот же SQL-запрос: SELECT * FROM tipoad WHERE startdate <= NOW() ORDER BY startdate DESC Тут есть одна трудность. Если вы, усердно работая над базой советов, продержались (в отличие от меня) год, то такой запрос, во-первых, будет излишне нагружать mySQL, во-вторых, результат будет очень долго перекачиваться клиенту и, в-третьих, займет слишком много места в окне браузера. Для того, чтобы преодолеть эту трудность можно использовать запрос выборки заданного диапазона рядов. Для этого используется выражение LIMIT first,number, где first - номер первого ряда, number - количество выбираемых рядов. Необходимо заметить, что выборка и сортировка (WHERE... и ORDER BY... ) будет производиться до того, как будет наложено ограничение на выбираемый диапазон рядов. Кроме того, если количество выбираемых рядов будет превышать количество рядов в таблице, то операция закончится без ошибки, но в результат попадет только фактическое количество рядов. Таким образом, мы имеем инструмент для организации постраничного вывода. Ограничимся семью советами на страницу. Для большей наглядности кода разработаем функцию, которой будем передавать номер необходимой страницы. Номер первой строки будем вычислять путем умножения номера страницы на количество советов на странице. Код выбора советов для текущей страницы будет выглядеть следующим образом. function getAllTips($page) {
$tpp = 7;
$frst = $page*$tpp;
$sql = "SELECT * FROM tipoad WHERE startdate <= NOW()
ORDER BY startdate ASC LIMIT $frst,$tpp";
$res = mysql_query($sql);
while ($tip = mysql_fetch_array($res)) {
// код обработки
}
Продумать алгоритм генерации ссылок на предыдущую и следующую страницу
предлагаю вам самостоятельно. Если это вызывает большие затруднения, то пишите
мне (exper@inbox.ru Рубрика: PHP
Подгрузка через AJAX HTML-кода, содержащег....
При разработке CMS S.Builder наша команда активно использовала AJAX. Теперь вот решили поделиться накопленным опытом. Начнем с этого хабратопика. Не буду здесь затрагивать различные фреймворки и библиотеки. Свой код всегда роднее. Для работы с AJAX-ом в S.Builder написана библиотека sbAJAX. Можете качать и пользоваться :). В этом файле есть функция sbEvalJS. Для тех, кто не знает, объясню. При подгрузке через AJAX и вставке на страницу HTML-кода, содержащего JavaScript, JavaScript выполняться не будет или полезут баги. Эта функция как раз решает поставленную задачу.
Подробнее... |
Рубрика: AJAX
| Добавлено: 19.11.2008
Обзор нового релиза самой мощной Ajax библ....
Хотя наш обзор немного запоздал, оригинальный Dojo 1.2 вышел в релизной версии ещё 6-го октября, но сейчас мы наверстаем упущенное. И так, Dojo Toolkit — это самая мощная и гибкая ajax-библиотека из всех, что есть на рынке, она активно развивается и имеет большое комьюнити. Кстати, это самое комьюнити, совместно с компанией Sitepen, имеет ещё несколько проектов, среди которых и Cometd и некоторые другие, не менее интересные, о которых мы скоро вам расскажем. Сегодня же все внимание на флагманский продукт — Dojo 1.2.
Подробнее... |
Рубрика: AJAX
| Добавлено: 19.11.2008
Firebug 1.3 и 1.4 alpha — что нового и инт....
Если вы профессиональный веб-разработчик и постоянно имеете дело с разработкой и отладкой сложных AJAX приложений, то наверняка знаете и используете Firebug — плагин для браузера Firefox, предназначенный для отладки и исследования веб-приложений. Текущая его версия, 1.2х достаточно стабильная и функциональна, чтобы помочь в 99% проблем, которые могут возникнуть при разработке. Но и этот инструмент не лишён если не недостатков, то некоторых фич, которые могли бы облегчить работу. И даже идеальный инструмент можно сделать ещё более идеальным, как бы это не звучало.
Подробнее... |
Рубрика: Вебмастеру
| Добавлено: 19.11.2008
Остальные статьи: |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|