Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывод записей из БД по времени
 
 автор: Akira   (31.12.2005 в 02:34)   письмо автору
 
 

Сама проблема в том, что записи храняться в виде 1135961477
Там Дата и Время.
А вот как вытащить данные за определенный промежуток времени (год, месяц, день)?

   
 
 автор: WebTech   (31.12.2005 в 08:55)   письмо автору
 
   для: Akira   (31.12.2005 в 02:34)
 

Похоже что время хранится в формате UNIX TIMESTAMP. Его можно перевести в привычный формат функцией MySQL from_unixtimestamp(), а затем использовать как обычно. Например, чтобы выбрать записи за последний месяц:

mysql> select * from table where to_days(now())-to_days(from_unixtimestamp(date))<=30

   
 
 автор: Akira   (31.12.2005 в 15:36)   письмо автору
 
   для: WebTech   (31.12.2005 в 08:55)
 

,где from_unixtimestamp() функция, а date - это секунды? Я верно понял?

   
 
 автор: cheops   (31.12.2005 в 16:05)   письмо автору
 
   для: Akira   (31.12.2005 в 15:36)
 

Да под date тут имеется ввиду поле, которое содержит число 1135961477.

   
 
 автор: Akira   (31.12.2005 в 17:30)   письмо автору
 
   для: cheops   (31.12.2005 в 16:05)
 

Ну я это и имел ввиду :) Я просто не знал, что их можно обратно преобразовать.

   
 
 автор: Akira   (01.01.2006 в 23:46)   письмо автору
 
   для: WebTech   (31.12.2005 в 08:55)
 


select * from 'journal' where 'date' (now()-'date'(from_unixtimestamp('1135964211')))<=30

не работает =\

   
 
 автор: Akira   (02.01.2006 в 00:19)   письмо автору
 
   для: WebTech   (31.12.2005 в 08:55)
 

нет :) не так :) to_days(now()) много меньше 1135961477.
Кажеться дату надо переводить через sql.
Я все время забываю, что это мини-язык.

   
 
 автор: Akira   (02.01.2006 в 12:50)   письмо автору
 
   для: Akira   (02.01.2006 в 00:19)
 

o_days(now()) - показывает кол-во дней.
А у меня в бд храниться кол-во секунд.

   
 
 автор: cheops   (02.01.2006 в 13:08)   письмо автору
 
   для: Akira   (02.01.2006 в 12:50)
 

Ну да, так WebTech и предлагает всё к дням привести и оперировать днями.

   
 
 автор: Akira   (02.01.2006 в 16:09)   письмо автору
 
   для: cheops   (02.01.2006 в 13:08)
 

нет вообще не так :)
FROM_UNIXTIME - из секунд в число.
UNIX_TIMESTAMP - число в секунды.
Я думаю использовать как то так.

SELECT * FROM 'journal' where 'date' BETWEEN 2 AND 3;

   
 
 автор: Akira   (02.01.2006 в 17:39)   письмо автору
 
   для: cheops   (02.01.2006 в 13:08)
 

Придумал, что-то вроде такого. Но опять не работает.

SELECT * FROM 'journal' WHERE 'date' BETWEEN UNIX_TIMESTAMP(DATE_SUB( NOW( ) , INTERVAL 1 HOUR )) AND UNIX_TIMESTAMP(NOW( ))

   
 
 автор: Akira   (02.01.2006 в 20:16)   письмо автору
 
   для: Akira   (02.01.2006 в 17:39)
 


SELECT * FROM 'journal' WHERE ' date' >= UNIX_TIMESTAMP( CONCAT( YEAR( CURRENT_DATE ) -0, '01', '02' ) )  AND 'date' < UNIX_TIMESTAMP( DATE_ADD( CONCAT( YEAR( CURRENT_DATE ) -0, '01', '02' ) , INTERVAL 1 MONTH ) );

Вот, phpclub помог. Хоть я его и не люблю, хотя в этот раз без наездов обошлось.

   
 
 автор: Akira   (02.01.2006 в 20:46)   письмо автору
 
   для: Akira   (31.12.2005 в 02:34)
 

1

SELECT * FROM 'journal' WHERE
'date' >= UNIX_TIMESTAMP( 20060102 ) AND
'date' < UNIX_TIMESTAMP( DATE_ADD( 20060102, INTERVAL 1 DAY ) )

Запрос занял 0.0010 сек

2

SELECT * FROM 'journal' WHERE
'date' >= UNIX_TIMESTAMP(DATE_FORMAT( NOW( ) , '%X%V%d' )) AND
'date' < UNIX_TIMESTAMP( DATE_ADD( DATE_FORMAT( NOW( ) , '%X%V%d' ) , INTERVAL 1 DAY ) )

Запрос занял 0.0011 сек

3

SELECT * FROM 'journal' WHERE
' date' >= UNIX_TIMESTAMP( CONCAT( YEAR( CURRENT_DATE ) -0, '01', '02' ) )  AND
'date' < UNIX_TIMESTAMP( DATE_ADD( CONCAT( YEAR( CURRENT_DATE ) -0, '01', '02' ) , INTERVAL 1 MONTH ) );

Запрос занял 0.0026 сек

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования