[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Web - программирование / PHP /

Система Совет дня.Часть 2

NAS, Webscript.ru

В прошлый раз я остановился на ситуации, когда в базе отсутствует совет дня, соответствующий текущей дате. В этом случае нужно выбрать самый поздний совет. Для этого используем следующий 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).




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - программирование / PHP /

GTK+: перспективы развития
02-03-2010   

Библиотека GTK+ прошла долгий путь развития и сейчас очень популярна. GNOME, одна из ведущих оконных сред, использует GTK+ почти исключительно, GIMP построен на GTK+, множество коммерческих разработчиков ПО, таких как Abobe, NVidia и VMware, решили использовать эту библиотеку в качестве графической основы для своих продуктов... подробнее

Кол. просмотров: общее - 4944 сегодня - 0

Новостной портал
13-11-2009   

Slashdot.org – популярный новостной портал с посещаемостью 50 млн. человек в месяц. Авторы проекта добились такого успеха, предоставляя пользователям свежие и интересные новости из мира IT... подробнее

Кол. просмотров: общее - 4853 сегодня - 0

Параллельное выполнение скриптов может нарушить целостность информации в файлах
13-11-2009   

Здесь рассматривается вопрос, что бывает, если запустить некий скрипт почти одновременно (что происходит, например, при большой нагруженности сервера) несколько раз, т.е. запустить несколько копий одного и того же скрипта. И к чему это может привести... подробнее

Кол. просмотров: общее - 4629 сегодня - 0

No spam.php
10-11-2009   

...и снова о спаме. Кто о нем только не писал, и все писали, что это плохо и ай-яй-яй. Я не буду оригинальничать, и тоже скажу – это плохо. Это ай-яй-яй. Как бороться со спамерами со своей стороны... подробнее

Кол. просмотров: общее - 4687 сегодня - 1

Начинаем работу с рисунками в php для Windows
10-11-2009   

Эта статья даст вам общее представление о том, как создавать, обрабатывать и выводить рисунки в PHP4 для Windows... подробнее

Кол. просмотров: общее - 4661 сегодня - 2



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects