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

Форум MySQL

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

 

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

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

тема: UNIX_TIMESTAMP ..за сегодня
 
 автор: Yakor   (27.05.2006 в 01:54)   письмо автору
 
 

Эта штука выводит юзеров за последние сутки...
$sql = 'SELECT 'username', 'user_id' FROM 'users' WHERE 'user_lastvisit' > UNIX_TIMESTAMP(NOW() - INTERVAL 1 DAY)
...подскажите пожалуйста как седалть запрос который выводил бы юзеров посетивших за сегодня, а не за последние 24ч.

Зарание спасибо.

   
 
 автор: cheops   (27.05.2006 в 10:57)   письмо автору
 
   для: Yakor   (27.05.2006 в 01:54)
 

Можно поступить следующим образом
SELECT username, user_id FROM users WHERE user_lastvisit > '".date("Y-m-d 0:00:00")."'"

   
 
 автор: Yakor   (27.05.2006 в 15:14)   письмо автору
 
   для: cheops   (27.05.2006 в 10:57)
 


'SELECT 'username', 'user_id' FROM 'users' WHERE 'user_lastvisit' > UNIX_TIMESTAMP('.date("Y-m-d 0:00:00").'); '; 



'SELECT 'username', 'user_id' FROM 'users' WHERE 'user_lastvisit' > '.date("Y-m-d 0:00:00").' ; '; 


Что так что так... ничего не выводит... может дело в том что user_lastvisit хранится в поле INT(12) а не DATETIME...

   
 
 автор: cheops   (27.05.2006 в 16:26)   письмо автору
 
   для: Yakor   (27.05.2006 в 15:14)
 

Да дело в этом, лучше использовать DATETIME, если у вас имеются даты в UNIX TIMESTAMP их можно преобразовать в формат MySQL при помощи встроенной MySQL-функции FROM_UNIXTIME()
INSERT INTO tbl VALUES (NULL, FROM_UNIXTIME($timestamp))

   
 
 автор: Trianon   (29.05.2006 в 10:00)   письмо автору
 
   для: cheops   (27.05.2006 в 16:26)
 

Чем DATETIME лучше TIMESTAMP?
Ладно б где в другом контексте, но для lastvisit, по-моему, выбор DATETIME всяко противоестественный.

   
 
 автор: cheops   (29.05.2006 в 12:17)   письмо автору
 
   для: Trianon   (29.05.2006 в 10:00)
 

>Чем DATETIME лучше TIMESTAMP?
Дело в том, что начиная с MySQL 4.1 - внешне они ничем не отличаются и оба теперь хранятся в формате YYYY-MM-DD hh:mm:ss, т.е. TIMESTAMP теперь не хранится в секундах. Это связано с тем, что у TIMESTAMP имеется очень интересная особенность - такой столбец автоматически обновляется при выполнении операторов INSERT и UPDATE - на это часто не обращают внимание и используют его для хранения времени в UNIX TIMESTAMP - поэтому его формат приведён к DATETIME, чтобы заострить внимание на этой особенности.

   
 
 автор: Trianon   (29.05.2006 в 13:25)   письмо автору
 
   для: cheops   (29.05.2006 в 12:17)
 

Очень надеюсь что это не так.
Впрочем, сейчас проверю.

   
 
 автор: Trianon   (29.05.2006 в 14:02)   письмо автору
 
   для: Trianon   (29.05.2006 в 13:25)
 

Как я и предполагал.
TIMESTAMP: Физически хранится в секундах. Например, 2006-05-29 13:45:11 (для таймзоны MSD) хранится как число секунд 1148895911. В файле лежит его двоичный вид: 447AC2A7

TIMESTAMP имеет соответствующие свойства, как то область определения и возможность установки в NOW(). Но не всегда, а лишь при необходимости.
SELECTом поле типа TIMESTAMP выводится в форме YYYY-MM-DD HH:MM:SS, что вобщем-то и удобно и оправданно.

DATETIME: Физически хранится в слабоупакованном виде, привязанном к таймзоне сервера:
Например, 2006-05-29 13:45:11 хранится как число 20060529134511 . В файле лежит его двоичный вид: 123EB4B68BAF

   
 
 автор: cheops   (29.05.2006 в 17:39)   письмо автору
 
   для: Trianon   (29.05.2006 в 14:02)
 

Физическое представление даты - это забота MySQL (собственно его менять не имело смысла - только ошибок в отлаженной код привнесли бы), для разработчика имеет значение только интерфейс. Если создадим таблицу
CREATE TABLE t (
date_time DATETIME NOT NULL ,
time_stamp TIMESTAMP NOT NULL 
);

И поместим в неё запись
INSERT INTO t VALUES();

то выборка вернёт следующий результат
mysql> SELECT * FROM t;
+---------------------+---------------------+
| date_time           | time_stamp          |
+---------------------+---------------------+
| 0000-00-00 00:00:00 | 2006-05-29 17:34:31 |
+---------------------+---------------------+

Т.е. формат типа TIMESTAMP, начиная с MySQL 4.1 действительно приведён к DATETIME (раньше вместо 2006-05-29 17:34:31 было бы целое число), а любой оператор UPDATE, даже не затрагивающий поле time_stamp - будет приводить к тому, что в этому полю будет автоматически присваиваться текущее время.

   
 
 автор: Trianon   (29.05.2006 в 19:32)   письмо автору
 
   для: cheops   (29.05.2006 в 17:39)
 

Ну и что ч того? Никто не мешает любое из этих двух свойств поля (инициализация текущим временем и автообновление текущим временем ) выключить. Как по одиночке, так и вместе.
Да, если не указывать явно умалчиваемое значение, то у первого TIMESTAMP-поля они окажутся включены. Но: а) если не указывать обратное, и б) только у первого из таких полей.

А разница между этими типами в первую очередь в том, что TIMESTAMP не связан локалью с сервером. Во вторую, в диапазоне представимых значений (мой день рождения, например, в формате TIMESTAMP переносимым образом не представить).
Если эти два момента (физический смысл и диапазон) несущественны для разработчика... что ж ... мне его жаль.

Согласен, все эти безумные навороты правил инициализации и автообновления от применения этого типа полей несколько отталкивают. Но это еще не повод заменять их на DATETIME скопом.

Это как с арбуза на дыню перейти. Вроде оба круглые и здоровые, и созревают оба в августе.
А вкус - разный.

   
 
 автор: Yakor   (29.05.2006 в 03:12)   письмо автору
 
   для: cheops   (27.05.2006 в 10:57)
 

Подсказали:
SELECT username, user_id 
FROM users
WHERE user_lastvisit > unix_timestamp( curdate( ) ) 

   
Rambler's Top100
вверх

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