Автор Тема: Perl+time+mysql  (Прочитано 7828 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Harvester

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 123
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Perl+time+mysql
« : 22 Апреля 2003, 16:45:26 »
Есть база данных (новости). Как лучше организовать архив новостей с сортировкой по дате? Т.е. как записать туда текущую дату понятно (например, use Time::localtime и т.д. можно и по-другому), а вот как потом сделать вывод с 1 по 15 апреля?
Если ты не один, значит... ты ноль!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Perl+time+mysql
« Ответ #1 : 22 Апреля 2003, 16:50:58 »
perldoc -f time
perldoc -f localtime
perldoc -f gmtime
+ search this forum
The documentations is your friend

Оффлайн C++

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 221
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Perl+time+mysql
« Ответ #2 : 22 Апреля 2003, 23:10:33 »
Должно работать, сам не проверял... выберет из базы все записи за последние 15 дней....

my 
@date=localtime(time);
$date[5]+=1900;
$date[4]++;
my $endDate="$date[5]-$date[4]-$date[3]";
@
date=localtime(time-1296000);
$date[5]+=1900;
$date[4]++;
my $startDate="$date[5]-$date[4]-$date[3]";
	
	

$sth=$dbh->prepare("SELECT * FROM table WHERE dates BETWEEN \'$startDate\' AND \'$endDate\' ORDER BY dates");
$sth->execute;

Оффлайн Harvester

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 123
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Perl+time+mysql
« Ответ #3 : 23 Апреля 2003, 13:16:55 »
Я остановился на

use Time::localtime;
$tm=localtime;

$day=$tm->mday;
$month=$tm->mon+1;
$year=$tm->year+1900;
Если ты не один, значит... ты ноль!

Оффлайн NCRangeR

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 42
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.mephix.h1.ru
Perl+time+mysql
« Ответ #4 : 24 Апреля 2003, 05:38:31 »
C++, Harvester
Зачем в таблицу заносить именно localtime??
Не проще ли в поле типа INT8 заносить непосредственно time? мне кажется, что от этого система и ускорится (так как сортировать и проводить прочие действия с целым явно быстрее, чем с датой) и вообще все будет как-то красивее смотреться...
- How does the CPAN work?
 - With dark magic, evil-looking sacrificial knives and scantily clad virgins under pale moonlight.

Оффлайн Harvester

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 123
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Perl+time+mysql
« Ответ #5 : 24 Апреля 2003, 13:32:59 »
Собственно дату и запихиваем. Если занести дату по колонкам, то искать проще(select may и 2003). Минимум вычислений потом с большим объемом архива.
Если ты не один, значит... ты ноль!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Perl+time+mysql
« Ответ #6 : 24 Апреля 2003, 13:44:32 »
Harvester вот тут ты ошибаешся.
Быстрее для MySQL будет найти между 634524358 и 634524399 чем между 23 april 2002 и 1 may 2003. А перевести 634524358 в читабельный вид дело одной строчки.
Это в качестве совета.
The documentations is your friend

Оффлайн Harvester

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 123
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Perl+time+mysql
« Ответ #7 : 24 Апреля 2003, 15:15:26 »
А если найти только все за апрель или май. Т.е. найти, где 3 или 4 в строках (год потом тоже можно одной цифрой обозначать)? По сравнению с нахождением 9-значного числа. Где больше затрат?
Если ты не один, значит... ты ноль!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Perl+time+mysql
« Ответ #8 : 24 Апреля 2003, 15:45:07 »
Они у тебя будут в разных столбцах хранится?
Почитай-ка http://www.mysql.com/doc/ru/Date_calculations.html и разделы по оптимизации.
The documentations is your friend

Оффлайн Harvester

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 123
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Perl+time+mysql
« Ответ #9 : 24 Апреля 2003, 16:18:25 »
Пока не решил. Скорее всего в одном. День мне уже не нужен. Можно обойтись записью 43 (ну 403) = апрель 2003. Найти данные за апрель 2003 = найти в столбце 43 (403). Зачем искать 634524399 ?
Если ты не один, значит... ты ноль!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Perl+time+mysql
« Ответ #10 : 24 Апреля 2003, 16:33:07 »
Дату новости ты будешь как выводить? Апрель 2003г? Или лучше 20 Апреля 2003г 20:15
Дело конечно твое, но "лучше один день потерять зато потом за час долететь" (С) из мультфильма.
The documentations is your friend

Оффлайн Alone

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 182
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Perl+time+mysql
« Ответ #11 : 24 Апреля 2003, 16:54:17 »
Люди 1к извенений :)
Мы же говорим о mySQL ???
Harvester чем тебе не нравятся поля типа DATE
Я еще бы понял если было бы только DATETIME
Или если планировался бы такой поток при катором экономия 1 байта позволяла б сэкономить сервак :)
DATE размер 3б
формат YYYY-MM-DD
INSERT INTO .... data_add=NOW().... (data_add=текущему числу например: 2003-04-24)
вывести все новости за текущий месяц
SELECT ... FROM ... data_add>\'2003-04-01\' AND data_addли так
SELECT ... FROM ... data_add>\'2003-04-01\' AND data_add<\'2003-04-24\'

Оффлайн Harvester

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 123
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Perl+time+mysql
« Ответ #12 : 24 Апреля 2003, 17:05:36 »
Об этом я не подумал...

Дату можно тоже сохранять и выводить потом даже с часами, минутами и секундами, но поиск для скорости будет по месяцам и году. Я думаю. что никому в голову не придет искать новость по часам и минутам. К тому же, новости будут добавляться не каждый день.
Если ты не один, значит... ты ноль!

Оффлайн Alone

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 182
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Perl+time+mysql
« Ответ #13 : 24 Апреля 2003, 17:39:03 »
Я нигде не нашел(наверное ни там или не правильно искал :) )
как хранятся переменные дат в базе
но явно ни как строки :)
TIMESTAMP занимает 4байта формат yyyy-mm-dd hh:dd:ss
хотя....
Опять же ни нашел ( возможно что то с монитором или глазами а то и головой :) ) в руководстве по оптимизации указаний не использовать переменные дат
Harvester вы вводите лишнее поле не ниже 2байт (ydd)
вы считаете что выигреш уменьшения размера значений сравнения превысит проигреш из-за увеличения базы ?

Оффлайн Harvester

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 123
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Perl+time+mysql
« Ответ #14 : 24 Апреля 2003, 18:40:12 »
Ау!
Речь идет не о размере базы данных, а об удобстве манипулирования и экономии на вычислениях.
Если все это ничтожно мало, то лучше взять yyyy-mm-dd.
Если ты не один, значит... ты ноль!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28