Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Архив для чата


Автор: Elfet 17.10.2006, 18:59
Есть таблица чата примерно такого содержания: время(в секундах с 1970,time()), сообщение
Хочу построить такой скрипт/программу: в одной колонке выводится все дни от первой строчки в БД и до сего дня: ДД/ММ/ГГГГ
Нажимая на нужный день можно посмотреть какие записи в БД содержатся на это число. Если они есть конечно. 
 smile Как получить записи за определённый день из БД?

Автор: Opik 17.10.2006, 19:20
Elfet, 
Код

$day = mktime(НАЧАЛО ДНЯ);
$day_end = $day + 84600;

Код

WHERE date >  $day AND date < $day_end

В чем проблема то?)

Автор: Elfet 17.10.2006, 22:43
А как список всех дней получить? И это начало дня?

Автор: Opik 17.10.2006, 23:02
Elfet, 
Список?
1) Берешь из базы минимальную UNIX - дату.
2) Берешь текущую дату.
3) Строишь список дней.
4) По конкретному дню уже пытаешься достать архив.
Начало дня?
www.php.net/mktime
Парсишь день на число, месяц, год и передаешь эти данные вышеуказанной функции, как именно есть в мануале.

Автор: Elfet 17.10.2006, 23:20
А как минимальную UNIX - дату получить? smile 


PS Я дураком не прикидываюсь, я такой и есть smile
PPS Или позно уже сегодня....

Автор: Opik 17.10.2006, 23:26
Elfet, 
мдя smile
Код

SELECT min(date) AS min FROM `archive`

Автор: Elfet 18.10.2006, 14:37
smile Вау)) я Бы сложнее гораздо делал)))

А список дней тоже не просто посторить то! smile В месяце может быть 28,29,30,31 день, года бывают високосными. Как его строить?

Автор: Opik 18.10.2006, 14:58
Elfet, 
А сделай ещё проще.
Тебе ведь не нужны дни, в которых записей нет? Так? думаю да. А у дней, в которых записи есть, неправильных дат быть не может:
Код

 $cache = array();
 $query = mysql_query("SELECT time FROM table");
 while($row = mysql_fetch_assoc($query))
 {
       $date = date("Y.m.d", $row['time']);
       if(!isset($cache[$date]))
       {
             // добавляем дату в список/массив по логике скрипта, можно потом передать, если массив, в шаблонизатор, например, в smarty
             $cache[$date] = true;
       }
 }


Автор: Elfet 18.10.2006, 16:06
ну, это хорошо если база не большая
А у меня в чате уже 34 000 сообщений smile И каждый раз строить - проблематично.

Автор: Opik 18.10.2006, 17:24
Elfet, 
засеки через microtime() сколько это, "проблематично"?

Автор: Elfet 18.10.2006, 20:46
имхо не правильно. Получать каждый раз всю таблицу и перебирть её

Автор: Opik 18.10.2006, 23:05
Elfet, 
Можешь эти данные кешировать на день, что тебе мешает?

Автор: Elfet 18.10.2006, 23:11
Можно smile А может сё же есть способ легче?
А вот так вот? 
Код

 for($i=$day; $i<=$day_end-42300; $i+=84600)
 {
       $date = date("Y.m.d", $i);
       if(!isset($cache[$date]))
       {
             $cache[$date] = true;
       }
 }

Автор: Opik 18.10.2006, 23:41
Elfet, 
Можно, я думал о таком способе. Но
1) Появляется куча лишних дат (если сообщений нет)
2) В этом варианте кеш не нужен. массивный я имею в виду

Автор: Elfet 19.10.2006, 12:10
Да пустые дни появляются. Буду этот вариант использовать.
Только вот, правильно ли я цикл составил по дням?
Код

for($i=$day; $i<=$day_end-42300; $i+=84600)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)