Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Архив для чата 
:(
    Опции темы
Elfet
  Дата 17.10.2006, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



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


--------------------
PM MAIL WWW Skype   Вверх
Opik
Дата 17.10.2006, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



Elfet, 
Код

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

Код

WHERE date >  $day AND date < $day_end

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

Это сообщение отредактировал(а) Opik - 17.10.2006, 19:21
PM MAIL Skype   Вверх
Elfet
Дата 17.10.2006, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



А как список всех дней получить? И это начало дня?


--------------------
PM MAIL WWW Skype   Вверх
Opik
Дата 17.10.2006, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



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


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



А как минимальную UNIX - дату получить? smile 


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



--------------------
PM MAIL WWW Skype   Вверх
Opik
Дата 17.10.2006, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



Elfet, 
мдя smile
Код

SELECT min(date) AS min FROM `archive`

PM MAIL Skype   Вверх
Elfet
Дата 18.10.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



smile Вау)) я Бы сложнее гораздо делал)))

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


--------------------
PM MAIL WWW Skype   Вверх
Opik
Дата 18.10.2006, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



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;
       }
 }



Это сообщение отредактировал(а) Opik - 18.10.2006, 14:59
PM MAIL Skype   Вверх
Elfet
Дата 18.10.2006, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



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


--------------------
PM MAIL WWW Skype   Вверх
Opik
Дата 18.10.2006, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



Elfet, 
засеки через microtime() сколько это, "проблематично"?
PM MAIL Skype   Вверх
Elfet
Дата 18.10.2006, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



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


--------------------
PM MAIL WWW Skype   Вверх
Opik
Дата 18.10.2006, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



Elfet, 
Можешь эти данные кешировать на день, что тебе мешает?
PM MAIL Skype   Вверх
Elfet
Дата 18.10.2006, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Можно smile А может сё же есть способ легче?
А вот так вот? 
Код

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


Это сообщение отредактировал(а) Elfet - 18.10.2006, 23:11


--------------------
PM MAIL WWW Skype   Вверх
Opik
Дата 18.10.2006, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 2
Всего: 55



Elfet, 
Можно, я думал о таком способе. Но
1) Появляется куча лишних дат (если сообщений нет)
2) В этом варианте кеш не нужен. массивный я имею в виду
PM MAIL Skype   Вверх
Elfet
Дата 19.10.2006, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



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

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



--------------------
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0509 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.