трудности с выводом новостей по дням недели

iolke

Новичок
трудности с выводом новостей по дням недели

Есть бд с полями: дата открытия, дата закрытия, сама новость, и может быть нехватает даты самой новости(когда оно будет)) для того чтобы опредилить с помощью функции weekday день недели. Или как иначе можно новость в интервале за неделю выводить каждую в свой день и в свою таблицу, и притом чтобы на странице сразу выходили все новости за неделю каждая в свой день недели?
 

pilot911

Новичок
тут надо действовать так

прежде в запросе к таблице задать условие для выбора новостей не старше последних 7 дней, сортировку задать по дате

далее все просто

PHP:
	   $res_news	=	.... запрос

	   $weekday	=	0;
	   while($row	=	$DB->sql_fetch_assoc($res_news))	{

			if ($weekday!=($nwd=date('dmY', $row['tstamp'])))	{
				$weekday	=	$nwd;
				 ...... вывод даты
 			}

 			...... вывод новости
 
 	   }

будут перебираться все новости от самой свежей до самой несвежей, и как только день недели следующей новости не совпадет с днем недели предыдущей - значит, начался новый день и эта новая дата будет тобой поймана в if ($weekday!=($nwd=date('dmY', $row['tstamp'])))
 

Фанат

oncle terrible
Команда форума
iolke
Допустим, у тебя есть массив новостей за последнюю неделю.
Дальше у тебя проблема в чем? Разнести эти новости по дням недели?
Или ты у нас хочешь спросить, можно ли по дате открытия определить дату события?
 

iolke

Новичок
у меня есть массив новостей за семь дней. как эти новости распределить по дням недели? при том, каждый день недели должен выводиться в свою таблицу. получается на странице должно быть семь таблиц каждая из которых соответствует дню недели. как не писать запрос на вывод семь раз, а сделать проще?
 

Активист

Активист
Команда форума
У тебя база данных или очередное хранение данных в файлах? Покажи свой код тут http://phpclub.ru/paste

-~{}~ 27.11.08 08:44:

pilot911
знаешь, лучше бы сделать запрос вот так
Код:
SELECT `row1`, `row2`, `row3`, DATE_FORMAT(`date_row`, '%w') AS `weekday`
FROM `table`
WHERE `date_row` BETWEEN DATE_ADD(NOW(), INTERVAL - 7 DAY) AND NOW()
ORDER BY `weekday`, `date_row`
Далее можно использовать конструкцию
PHP:
$tables_array = array();

while ($result = $this->sql->next_row_assoc()) {
$tables_array[$result['weekday']][] = $result;
}

var_dump($tables_array);
 

iolke

Новичок
$query = "SELECT head, chislo from afisha
WHERE `chislo` BETWEEN DATE_ADD(NOW(),INTERVAL - 7 DAY) AND NOW()";

вывод данных за интервал прошедших 7 дней. Как исправить на будущие 7 дней, т.к. я делаю афишу. И дальше выводить афишу например за понедельник в таблицу понедельник? Я хочу на странице сделать 7 таблиц - это семь дней, и выводить все будущие события сразу только каждое в свою таблицу.

-~{}~ 27.11.08 15:47:

второй запрос:
PHP:
$day=mysql_query("SELECT WEEKDAY(chislo) from afisha");
if(!$day)puterror("Ошибка151515");
$end = mysql_fetch_array($day);
 $fift = $end[0];
  echo "$fift";
[php]
Проблема - зарос определяет только день недели первой строки из базы, а не всех строк.
запрос должен назначить каждому событию из 7 дней свое число, соответствующее дню недели. я хочу объединить оба запроса, чтобы перебирать события за 7 дней в цикле и записывать событие с цифрой 4 соответствующее например дню недели -  четверг.
 

kvf77

Red Devil
PHP:
array(
    1 => array(
        'news',
        'news',
        'news',
    ),
    3 => array(
        'news',
        'news',
        'news',
    ),
    4 => array(
        'news',
        'news',
        'news',
    ),
    5 => array(
        'news',
        'news',
        'news',
    ),
    xxx => xxx
);
сделай массив с такой структурой, где ключ - это день недели, а содержимое - список новостей для этого дня. Соответственно два цикла спасут отца русской демократии.
 

Активист

Активист
Команда форума
iolke
Мне вообще не понятен твой вопрос. Изъясняешься ты как-то "странно"

Например:
"И дальше выводить афишу например за понедельник в таблицу понедельник?"
- Дальше после чего?
- В какую таблицу, php ничего не выводит в таблицу.

Нужно правильно формировать вопрос, указывая - исходные данные (структуру таблиц) и/или входные данные, и что ты хочешь получить в итоге, а так - одна каша в голове и в словах.
Нужно четко понимать, что данные бывают не в таблицах, а: в виде массивов, в виде вложенных массивов, строк, подмножества целых и подмножества иррациональных чисел, а также - данные могут быть - объектами, ресурсами и т.п.
> Как исправить на будущие 7 дней
INTERVAL + 7 DAY

> и выводить все будущие события сразу только каждое в свою
> таблицу
Вот это из разряда "начальника, 10 клок смен". Сразу после чего?

второй запрос:
PHP:
$day=mysql_query("SELECT WEEKDAY(chislo) as `weekday`from afisha");
if(!$day)puterror("Ошибка в запросе");
echo "Всего найдено записей: ".mysql_num_rows($day);
while($result = mysql_fetch_array($day)) {
echo $result['weekday'];
};
-~{}~ 27.11.08 18:26:

Да, и расставляйте, пожалуйста, хоть иногда, знаки препинания.

-~{}~ 27.11.08 18:29:

А еще, мне интересно, а зачем выводить афишу за прошлую неделю, мне например не интересен спектакль, на который я уже не попаду))
 

iolke

Новичок
извините, что нечетко изъясняюсь. Я хочу сделать афишу текущей недели и чтобы события на этой неделе распределялись каждое в свое место в соответствии с днем недели, например события понедельника падали в папку понедельник и т.д.
Для этого я делаю два запроса:
1. Чтобы преобразовать формат даты в числовое значение дня недели, например понельник это 0.

$query= "SELECT WEEKDAY(chislo) from afisha";
$day = mysql_query($query);
if(!$day) puterror("000000");
while($dni = mysql_fetch_array($day))
{ $fift = $dni[0];
echo "<table border=1 width=200>
<tr><td>".$fift."</td></tr></table>"; }

2. Второй для того, чтобы вывести афишу за текущую неделю, т.е. все ее поля.

$query="SELECT * FROM afisha WHERE WEEK(NOW()) - WEEK(chislo)=0 ORDER BY 'chislo'";
$ctg = mysql_query($query);
if(!$ctg)puterror("111111111");

while($cat = mysql_fetch_array($ctg)) {


echo "<table><tr>
<td >заголовок</td><td>".$cat['head']."</td></tr>
<tr>
<td >дата</td><td>".$cat['chislo']."</td></tr>
<tr>
<td>текст</td><td>"; echo nl2br($cat['content'])."</td>
</tr>
</table>"; }

Вопрос: как используя полученные данные распределить все содержимое таблицы афиша по своим папкам?
Была задумка такая - если полученная дата из таблицы соответствует значению понедельника (0), то рисуем таблицу А и выводим содержимое, если значение 5, то рисуем таблицу В и т.д. за каждый день недели. Но задумка не получается.
 

dimagolov

Новичок
iolke, тебе в запросе надо отобрать не за неделю а за 7 дней начиная с текущего, так как глупость в воскресенье отображать за прошедшую уже неделю и в запросе же отсортировать по возростанию.

потом просто отобразить в начале сегодняшнее расписание, потом завтрашенее и т.д, они все будут по порядку.
 

iolke

Новичок
Автор оригинала: dimagolov
iolke, тебе в запросе надо отобрать не за неделю а за 7 дней начиная с текущего, так как глупость в воскресенье отображать за прошедшую уже неделю и в запросе же отсортировать по возростанию.

потом просто отобразить в начале сегодняшнее расписание, потом завтрашенее и т.д, они все будут по порядку.
верно, с первым пунктом задача решена.

Дело в том, хочу визуально отобразить так, чтобы данные за разные дни недели распределялись в разные таблицы, а не шли один за другим по порядку. Хочу вначале страницы нарисовать таблицу отвечающую за понедельник и в нее выводить данные за понедельник, потом таблицу отвечающую за вторник.
 

Kib

Новичок
Автор оригинала: iolke
верно, с первым пунктом задача решена.

Дело в том, хочу визуально отобразить так, чтобы данные за разные дни недели распределялись в разные таблицы, а не шли один за другим по порядку. Хочу вначале страницы нарисовать таблицу отвечающую за понедельник и в нее выводить данные за понедельник, потом таблицу отвечающую за вторник.
echo "<table><tr>
<td >заголовок</td><td>".$cat['head']."</td></tr>
<tr>
<td >дата</td><td>".$cat['chislo']."</td></tr>
<tr>
<td>текст</td><td>"; echo nl2br($cat['content'])."</td>
</tr>
</table>"

Вот твой визуальный вывод, если хочешь по другому, так отформатируй как тебе надо. Воспользуйся поиском, здесь более чем достаточно было таких тем связанных с выводом информации.
 

iolke

Новичок
просто вывод мне нужен. отформатировать как мне надо не получается. я более чем понятно изъясняюсь, в этом и есть трудность!!!! - вывод одного и того же поля необходимо делать в разные таблицы, отображаемые одновременно.
такой темы здесь на форуме не нашлось.
используя оператор while или switch распределить данные по дням недели - может быть такой вариант?
 

dimagolov

Новичок
делать в разные таблицы, отображаемые одновременно.
у тебя что, HTML формируется в несколько потоков? неужели в цикле (ОДНОМ, ОДИН ОН НУЖЕН) по полученному массиву нельзя запоминать в отдельную переменную "текущую дату" и если это значение для строчки отличается, то закрывать-открывать таблицу или что там тебе надо делать для разделения дней?
 

iolke

Новичок
да именно для разделения дней

-~{}~ 02.12.08 11:33:

госпада подскажите в чем же все таки секркт, почему выводит все подряд, игнорируя if

$weekday=0;

$query= "select * from afisha
order by weekday(chislo)";
$day = mysql_query($query);
if(!$day) puterror("kkkkkkkkkkkkkk");

while($dni = mysql_fetch_array($day))
{
if($weekday=($dayss="DATE_FORMAT(".$dni['chislo'].", '%w')"))
{
echo"<table border=1><tr><td>".$dni['head']."
".$dni['chislo']."
".$dni['content']."
</td></tr></table>";
}
}
 

Активист

Активист
Команда форума
Попробуй вот так
PHP:
<?php
$tables_array = array();
$rusDays = array("Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота");

$query = "
SELECT `head`, `chislo`, `content`, DATE_FORMAT(`date_row`, '%w') AS `weekday`
FROM `afisha`
WHERE `chislo` BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL + 7 DAY)
ORDER BY `date_row`
";

$queryId = query($query) or die(mysql_error());

while ($result = mysql_fetch_assoc($queryId)) {
	$tables_array[$result['weekday']][] = $result;
} 

foreach ($tables_array as $weekday => $rows) {
	echo "<table><tr><th>Афиша на ближайший ".$rusDays[$weekday]."</th></tr>";
	foreach ($rows as $row) {
		echo "<table><tr><td><b>".$row['head']."</b>".$row['content']."</th></tr>";
	}
	echo "</table>";
}

?>
 

iolke

Новичок
надо чтоб было так :

$query= "select * from afisha
where weekday(chislo)=2";


для семи дней,и чтоб все не подряд...


как не делать семь запросов, а сделать caseами вывод - если день недели понедельник то выводим сбда, вторник значит в другую таблицу... как????
 

iolke

Новичок
Активист
что такое foreach ($rows as $row) {
echo "<table><tr><td><b>".$row['head']."</b>".$row['content']."</th></tr>";
и чем в данном коде оно связано с определенным днем недели??
 
Сверху