Forum Webscript.Ru

Программирование => Perl => Тема начата: Harvester от 22 Апреля 2003, 16:45:26

Название: Perl+time+mysql
Отправлено: Harvester от 22 Апреля 2003, 16:45:26
Есть база данных (новости). Как лучше организовать архив новостей с сортировкой по дате? Т.е. как записать туда текущую дату понятно (например, use Time::localtime и т.д. можно и по-другому), а вот как потом сделать вывод с 1 по 15 апреля?
Название: Perl+time+mysql
Отправлено: NeoNox от 22 Апреля 2003, 16:50:58
perldoc -f time
perldoc -f localtime
perldoc -f gmtime
+ search this forum
Название: Perl+time+mysql
Отправлено: C++ от 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;
Название: Perl+time+mysql
Отправлено: Harvester от 23 Апреля 2003, 13:16:55
Я остановился на

use Time::localtime;
$tm=localtime;

$day=$tm->mday;
$month=$tm->mon+1;
$year=$tm->year+1900;
Название: Perl+time+mysql
Отправлено: NCRangeR от 24 Апреля 2003, 05:38:31
C++, Harvester
Зачем в таблицу заносить именно localtime??
Не проще ли в поле типа INT8 заносить непосредственно time? мне кажется, что от этого система и ускорится (так как сортировать и проводить прочие действия с целым явно быстрее, чем с датой) и вообще все будет как-то красивее смотреться...
Название: Perl+time+mysql
Отправлено: Harvester от 24 Апреля 2003, 13:32:59
Собственно дату и запихиваем. Если занести дату по колонкам, то искать проще(select may и 2003). Минимум вычислений потом с большим объемом архива.
Название: Perl+time+mysql
Отправлено: NeoNox от 24 Апреля 2003, 13:44:32
Harvester вот тут ты ошибаешся.
Быстрее для MySQL будет найти между 634524358 и 634524399 чем между 23 april 2002 и 1 may 2003. А перевести 634524358 в читабельный вид дело одной строчки.
Это в качестве совета.
Название: Perl+time+mysql
Отправлено: Harvester от 24 Апреля 2003, 15:15:26
А если найти только все за апрель или май. Т.е. найти, где 3 или 4 в строках (год потом тоже можно одной цифрой обозначать)? По сравнению с нахождением 9-значного числа. Где больше затрат?
Название: Perl+time+mysql
Отправлено: NeoNox от 24 Апреля 2003, 15:45:07
Они у тебя будут в разных столбцах хранится?
Почитай-ка http://www.mysql.com/doc/ru/Date_calculations.html и разделы по оптимизации.
Название: Perl+time+mysql
Отправлено: Harvester от 24 Апреля 2003, 16:18:25
Пока не решил. Скорее всего в одном. День мне уже не нужен. Можно обойтись записью 43 (ну 403) = апрель 2003. Найти данные за апрель 2003 = найти в столбце 43 (403). Зачем искать 634524399 ?
Название: Perl+time+mysql
Отправлено: NeoNox от 24 Апреля 2003, 16:33:07
Дату новости ты будешь как выводить? Апрель 2003г? Или лучше 20 Апреля 2003г 20:15
Дело конечно твое, но "лучше один день потерять зато потом за час долететь" (С) из мультфильма.
Название: Perl+time+mysql
Отправлено: Alone от 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\'
Название: Perl+time+mysql
Отправлено: Harvester от 24 Апреля 2003, 17:05:36
Об этом я не подумал...

Дату можно тоже сохранять и выводить потом даже с часами, минутами и секундами, но поиск для скорости будет по месяцам и году. Я думаю. что никому в голову не придет искать новость по часам и минутам. К тому же, новости будут добавляться не каждый день.
Название: Perl+time+mysql
Отправлено: Alone от 24 Апреля 2003, 17:39:03
Я нигде не нашел(наверное ни там или не правильно искал :) )
как хранятся переменные дат в базе
но явно ни как строки :)
TIMESTAMP занимает 4байта формат yyyy-mm-dd hh:dd:ss
хотя....
Опять же ни нашел ( возможно что то с монитором или глазами а то и головой :) ) в руководстве по оптимизации указаний не использовать переменные дат
Harvester вы вводите лишнее поле не ниже 2байт (ydd)
вы считаете что выигреш уменьшения размера значений сравнения превысит проигреш из-за увеличения базы ?
Название: Perl+time+mysql
Отправлено: Harvester от 24 Апреля 2003, 18:40:12
Ау!
Речь идет не о размере базы данных, а об удобстве манипулирования и экономии на вычислениях.
Если все это ничтожно мало, то лучше взять yyyy-mm-dd.
Название: Perl+time+mysql
Отправлено: Xander от 24 Апреля 2003, 18:43:08
Harvester
Не морочь себе голову. Делай TIMESTAMP. Или DATETIME.
Название: Perl+time+mysql
Отправлено: NeoNox от 24 Апреля 2003, 18:49:23
Обратите внимание на ссылку данную мной на первой странице этой темы.
На сайте http://www.mysql.com находится подробная документация.

[Тема закрыта.]