Система "Рада дня". Частина 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). У наступномудосвіді розглянемо як реалізується частина, яка відповідає за розміщеннятексту ради на чужих сторінках.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*