|
|
|
| Имеется база данных следующего вида:
CREATE TABLE news (
id_news int(11) NOT NULL auto_increment,
name tinytext NOT NULL,
body text NOT NULL,
putdate datetime NOT NULL default '0000-00-00 00:00:00',
url tinytext NOT NULL,
url_text tinytext NOT NULL,
url_pict tinytext NOT NULL,
hide enum('show','hide') NOT NULL default 'show',
PRIMARY KEY (id_news)
) TYPE=MyISAM;
Выводим все имеющиеся данные из базы:
<?php
if(isset($_GET['id_news']))
{
$query = "SELECT * FROM news WHERE hide='show' AND id_news=".$_GET['id_news'];
}
else
{
$query = "SELECT id_news,
name,
body,
DATE_FORMAT(putdate,'%d.%m.%Y') as putdate_format,
url,
url_text,
url_pict,
hide
FROM news
WHERE hide='show' AND putdate <= NOW()
ORDER BY putdate DESC";
}
$new = mysql_query($query);
if (!$new) puterror("Ошибка при обращении к блоку новостей");
if(mysql_num_rows($new) > 0)
{
while($news = mysql_fetch_array($new))
{
// Выводим заголовок новости
echo "<p class='zagnews'>".$news['name']." <em class=datanews>".$news['putdate_format']."</em></p>"; // Выводим тело новости перводя символы
// Выводим тело новости переводя символы
// переноса строки в тег <br>
echo "<p class='text'>";
// Выводим изображение
if(trim($news['url_pict']) != "" && trim($news['url_pict']) != "-")
echo "<img align=right class=img src=".$news['url_pict'].">";
echo nl2br($news['body'])."</p>";
// Выводим URL
if(trim($news['url']) != "" && trim($news['url']) != "-")
echo "<p class='linkr'><a class='link' href=".$news['url'].">".$news['url_text']."</a></p>";
}
}
?>
|
Вопрос, уважаемые форумчане, в следующем: как с помощью GET-запроса (например, http://news.ru/index.php?act=27-01-2007) вывести новости за неделю, месяц, год и т.д.
Думаю, что нужно подставлять переменную в WHERE. Но как? И думаю что с помощью функции mktime(). Но… Всё равно одни вопросы. | |
|
|
|
|
|
|
|
для: Shadow69
(07.02.2007 в 09:49)
| | В первую очередь - зачем вот этот кусок "AND putdate <= NOW()" ??? по логике вещей новости явно не должны вноситься будущим числом =))) а значит всегда для всех записей это условие верно, а значит совершенну ненужное - только нагрузку дополнительную создает.
второе - что именно-то нужно? выводить за год, месяц, неделю??? или нужны просто SQL-запросы для всех 3-х вариантов? | |
|
|
|
|
|
|
|
для: ZuArt
(07.02.2007 в 10:01)
| | >В первую очередь - зачем вот этот кусок "AND putdate <= NOW()" ???
Такие вещи иногда (нечасто, не спорю, только в некоторых случаях) имеют смысл.
Например, администратор может забить в ленту поздравления с ближайшими праздниками, и не париться на предмет того, что не успеет это сделать вовремя. Подобного рода анонсы ставятся с датами в будущем. | |
|
|
|
|
|
|
|
для: Trianon
(07.02.2007 в 10:06)
| | =) убедил ;) - такое бывает =) | |
|
|
|
|
|
|
|
для: Shadow69
(07.02.2007 в 09:49)
| | > как с помощью GET-запроса (например, http://news.ru/index.php?act=27-01-2007) вывести новости за неделю, месяц, год и т.д.
Если задача ставится именно так, можно предложить обрабатывать два поля (например from и to) и выводить данные, которые попадают в промежуток между ними.
<?
$from = mysql_escape_string($_GET['from']);
$to= mysql_escape_string($_GET['to']);
$query = "SELECT ...... WHERE putdate BETWEEN '$from' AND '$to' ORDER BY putdate";
|
| |
|
|
|
|
|
|
|
для: Trianon
(07.02.2007 в 10:45)
| | Спасибо -)))...
совсем забыл про это((( | |
|
|
|
|
|
|
|
для: Shadow69
(07.02.2007 в 09:49)
| | <?php
$tomorrow = mktime(0, 0, 0, date("m") , date("d")+1, date("Y"));
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"), date("Y"));
$nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")+1);
?>
смотри -) | |
|
|
|
|
|
|
|
для: Shadow69
(07.02.2007 в 09:49)
| | Если дата храниться в формате DATE..., то
<?php
$tomorrow = date("Y-m-d", mktime(0, 0, 0, date("m") , date("d")+1, date("Y")));
$lastmonth = date("Y-m-d", mktime(0, 0, 0, date("m")-1, date("d"), date("Y")));
$nextyear = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d"), date("Y")+1));
?>
|
| |
|
|
|
|
|
|
|
для: ZuArt
(07.02.2007 в 10:59)
| | Всем спасибо!
А что может значить этот запрос: http://news.ru/index.php?min=31-01-2007?
Что такое min? И как он взаимодействует с sql-запросом?
else
{
....
FROM news
WHERE hide='show' AND putdate <= NOW() AND min = ????????
ORDER BY putdate DESC";
} | |
|
|
|
|
|
|
|
для: Shadow69
(07.02.2007 в 11:43)
| | Это не запрос SQL, а имя документа.
Как этот документ формируется, и какие sql-запросы при этом порождает, известно лишь скрипту index.php
Само по себе min (в отрыве от контекста) не значит ничего. Просто три буквы. | |
|
|
|
|
|
|
|
для: Shadow69
(07.02.2007 в 11:43)
| | Рискну предположить, что min - это параметр, с какого дня выводить новости, а при отсутствии последней даты, она, похоже берется по дефолту как текущая... что-то типа этого, видимо получается
FROM news
WHERE hide='show' AND putdate BETWEEN '$min' AND NOW()
ORDER BY putdate DESC"; | |
|
|
|
|
|
|
|
для: ZuArt
(07.02.2007 в 12:01)
| | Ещё раз всем огромное спасибо за ответы.
А как вывести дату соответствующую недельному, месячному сроку?
Например, сегодня 7-02-2007. А нужно вывести 31-01-2007.
$date = echo date () ????
http://news.ru/index.php?min=$date. | |
|
|
|
|
|
|
|
для: Shadow69
(07.02.2007 в 14:38)
| | Блин, туплю! :-)
Вот так:
$date = date("Y-m-d", mktime(0, 0, 0, date("m") , date("d")-7, date("Y")));
http://news.ru/index.php?min=$date.
|
Только выводит в формате 2007-01-31. А надо 31-01-2007. | |
|
|
|
|
|
|
|
для: Shadow69
(08.02.2007 в 08:16)
| | http://news.ru/index.php?min=$date.
Только выводит в формате 2007-01-31. А надо 31-01-2007
Зачем? Это же внутренний формат? | |
|
|
|