Forum Webscript.Ru
Программирование => PHP => Тема начата: 3D-Dragon от 06 Декабря 2001, 03:31:12
-
Я закончил административную часть своего новостного скрипта и подошел к части вывода новостей непосредственно на страницу.
Сначала хотел просто выводить последних 10 новостей, но в связи с тем, что на странице будет присутсвовать и календарь, теряется логичность этого вывода.
Я решил выводить новости автоматом за текущий день.
Проблема заключается в том, что новости не всегда обновляются ежедневно и при их отсутвстии будет показываться пустая страничка, а это не хорошо.
Вопрос:
----------
Как автоматически вывести новости, присутствующие в базе, только за один день и если за этот день новостей нет, то выводить новости за первый ближайший прошлый день с новостями ?
-
Просто выводи последние новости за один день и всё.
-
Это понятно, а если их нет в этот день.
-
Проверяй предыдущие пока они не появятся.
-
Вы меня извините, но логику я понимаю.
Я не могу правильно НАПИСАТЬ код :(
-
Можно сделать так: дату использовать только как дату последней новости, а из базы просто извлекать фиксированное кол-во последних по дате новостей. Тогда вся логика помещается в тот же запрос, что извлекает новости.
Насколько я помню:
$query="SELECT id,post_date,title,news FROM news WHERE 1 AND TO_DAYS(post_date) < TO_DAYS($dataF) LIMIT 0, $limit
$dataF - день по "календарю"
$limit - максимальное кол-во новстей на странице, например 10
-
MHz
Не работает :(
Вот кусок измененного по твоему совету кода
$show_rows = 10;
$dateF=date ( "Y-m-d H:i:s",mktime ());
if (!isset($limit)) $limit=0;
else $limit=$limit-1;
$query="select post_date,title,news,istochnik,url,autor,mail from news order by post_date WHERE 1 AND TO_DAYS(post_date) < TO_DAYS($dataF) desc limit $limit,$show_rows";
$result=mysql_query ($query);
while ($row=mysql_fetch_array ($result))
{
$post_date=$row["post_date"];
$title=$row["title"];
$news=$row["news"];
$istochnik=$row["istochnik"];
$url=$row["url"];
$autor=$row["autor"];
$mail=$row["mail"];
$limit=$limit+1;
?>
Где копать ???
Я уже сам вижу, что у меня неправильно определена $dateF
:mad:
Блин, как-же их сравнивать эти post_date и $dateF ?
-
Короче. Логика такова
SELECT post_date FROM news ORDER BY post_date DESC LIMIT 1
подгоняешь этот запрос под себя. чтобы тебе возвращалась дата последнего сообщения.
Ну а далее
select * from news where post_date=\'что получили из прудидущего селекта\'
-
можно попробовать так:
$show_rows = 10;
$dateF=date ( "Y-m-d",mktime ()); // текущая дата, но подразумевается что может быть любая
if (!isset($limit)) $limit=0;
else $limit=$limit-1; // это что такое ? навигация по страницам?
// тогда так ($page - текущая страница, должна передаваться через GET или POST):
$limit = ($page -1) * $show_rows;
$query="select post_date,title,news,istochnik,url,autor,mail from news WHERE TO_DAYS(post_date) < TO_DAYS(\'$dateF\') order by post_date limit $limit,$show_rows";
..и т.д.
-
SELECT post_date FROM news ORDER BY post_date DESC LIMIT 1
По-моему, лучше так ;) :
SELECT max(post_date) FROM news
-
MHz
Так работает, но выводятся 10 новостей, начинаются с самой поздней (по дате) и в порядке возрастания, а также не за один день, а за все которые попадаются в этом промежутке ...
Я уже вообще запутался :(
Пошел вешаться ...
Это ответ на твое предыдущее сообщение в 19:59
-
Так работает, но выводятся 10 новостей, начинаются с самой поздней (по дате) и в порядке возрастания, а также не за один день, а за все которые попадаются в этом промежутке ...
Так и задумывалось ... мной ;)
По-моему, здесь нужно определиться с идеологией:
если ты используешь календарь и новости выводятся за конкретный день, то не надо боятся что некоторыйе дни будут пустые. В этом случае нужно таким образом выводить календарь чтобы дни без новостей были не активны. А выбор последнего дня с новостями сделать так, как предложил Stek
Если же новостей не много, то, по-моему, лучше просто выводить определнное количество последних новостей за заданный инстервал и отказаться от календаря.
-
MHz ,
В этом случае нужно таким образом выводить календарь чтобы дни без новостей были не активны.
У меня календарь так и выводиться. Если новость есть за определенный день, то число в календаре является ссылкой на этот день, а если нет, то выводиться просто число без ссылки
А выбор последнего дня с новостями сделать так, как предложил Stek
Да, я так и хочу выводить, но у меня ПОКА не хватает знаний все правильно написАть.
Stek,
Разжуй мне пожалуйста вот это поподробнеее, учусь ведь
Короче. Логика такова
SELECT post_date FROM news ORDER BY post_date DESC LIMIT 1
подгоняешь этот запрос под себя. чтобы тебе возвращалась дата последнего сообщения.
Ну а далее
select * from news where post_date=\'что получили из прудидущего селекта\'
MHz ,
Если же новостей не много, то, по-моему, лучше просто выводить определнное количество последних новостей за заданный инстервал и отказаться от календаря.
Мне нужно чтобы новости выводились только за определенный день и календарь у меня для этого есть и правильно работатет.
-
кинь SQL код таблицы (структура только) в который ты новости хранишь и как ты вставляешь дату (в каком формате). Попробуем всем миром тебе запрос составить :)
-
Ну что, попробуем:
$show_rows = 10;
$query = mysql_query("SELECT TO_DAYS(MAX(post_date)) AS last_post_day FROM news");
$query_string = mysql_fetch_array($query);
$last_post_day = $query_string[\'last_post_day\']; // Дата последней новости
$query="SELECT post_date,title,news,istochnik,url,autor,mail FROM news WHERE TO_DAYS(post_date) = $last_post_day ORDER BY post_date DESC LIMIT 0, $show_rows";
Так, на скорую руку, так что ... (см подпись)
-
Stek ,
Вот копия newshost.sql
CREATE TABLE news (
id int(4) NOT NULL auto_increment,
post_date datetime DEFAULT \'0000-00-00 00:00:00\' ,
title varchar(80) NOT NULL DEFAULT \'\' ,
news text NOT NULL DEFAULT \'\' ,
istochnik varchar(40) NOT NULL DEFAULT \'\' ,
url varchar(100) NOT NULL DEFAULT \'\' ,
autor varchar(30) NOT NULL DEFAULT \'\' ,
mail varchar(50) NOT NULL DEFAULT \'\' ,
PRIMARY KEY (id)
);
Спасибо за соучастие ;)
-
MHz ,
Заработало !
ОГРОМНОЕ СПАСИБО !!!
-
3D-Dragon: колись как решил :)
Другим то же интересно, а может быть кому то и полезно.
-
А чего колоться (не ширяться), на первой странице этой ветки в самом низу MHz дал правильный запрос для решения проблемы.
Еще раз спасибо ему. ;)
Вот, могу повторить:
$show_rows = 10;
$query = mysql_query("SELECT TO_DAYS(MAX(post_date)) AS last_post_day FROM news");
$query_string = mysql_fetch_array($query);
$last_post_day = $query_string[\'last_post_day\']; // Дата последней новости
$query="SELECT post_date,title,news,istochnik,url,autor,mail FROM news WHERE TO_DAYS(post_date) = $last_post_day ORDER BY post_date DESC LIMIT 0, $show_rows";
Я правда у брал из этого ограничение на показ страниц $show_rows = 10; (это в самом начале)
и
LIMIT 0, $show_rows"; (это из запроса, как следствие 1)
так как мне это не нужно.
Вот и все.
Будут вопросы пиши.
Команда мне здесь понравилась.
Кстати, хочу исправить свою ошибку и передать благодарность всем кто пытался мне помочь, а то как-то лавры достались только Mhz. ;)
Мужики, ВСЕМ СПАСИБО !!!
Теперь и я смогу кому-нибудь помочь.