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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Вывод времени

Сообщения:  [1-10]   [11-18] 

 
 автор: kis-kis   (29.01.2007 в 10:10)   письмо автору
 
   для: Trianon   (27.01.2007 в 19:58)
 

Спасибо. Все исправил.

   
 
 автор: Trianon   (27.01.2007 в 19:58)   письмо автору
 
   для: kis-kis   (27.01.2007 в 18:39)
 

Может быть как-то так?

$query = "SELECT DATE_FORMAT(ntime, '%H:%i') as ntime, title FROM tv 
WHERE channel='$row2[id]' and data=CURRENT_DATE() 
  AND ntime >=CURTIME()
ORDER BY ntime+0-CURTIME() LIMIT 3";
$result=mysql_query($query) or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");


То что нужны не три ближайших, а три ближайших больших, несколько упрощает выражение ORDER BY.
И еще. Мне крайне не нравится, что псевдоним ntime (as ntime в первой строке) совпадает с именем реального поля. Так Вы рискуете напороться на неоднозначности.... Лучше бы там (и в php на выборке результатов) имя поменять.

   
 
 автор: kis-kis   (27.01.2007 в 18:39)   письмо автору
 
   для: Trianon   (27.01.2007 в 18:31)
 

В данный момент запрос выглядит так:

$query = "SELECT DATE_FORMAT(ntime, '%H:%i') as ntime, title FROM tv WHERE channel='$row2[id]' and data=CURRENT_DATE() 
ORDER BY ABS(UNIX_TIMESTAMP(concat(CURDATE(),' ',ntime))-UNIX_TIMESTAMP(NOW())) limit 3";
$result=mysql_query($query) or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");



>>Добавить соответствующее условие в раздел WHERE

А как оно должно выглядеть?

   
 
 автор: Trianon   (27.01.2007 в 18:31)   письмо автору
 
   для: kis-kis   (27.01.2007 в 17:43)
 

А как изменить данное условие, чтобы выводились 3 значения наиболее приближенные к данному
времени, но только в большую сторону... Чтобы время меньше текущего уже не выводилось.


Добавить соответствующее условие в раздел WHERE


И еще если использовать данный тип поля - TIMESTAMP.

То процесс обновления данных (около 2000 строк) будет очень долгим, (речь идет о программе ТВ), т.е. использовав тип поля time - необходимо было заменить всего лишь время 00:00:00, а теперь предется менять уже 0000-00-00 00:00:00.


Полагаю, Вы преувеличиваете... 2000 строк - ерундовая нагрузка.

TIME занимает 4 байта.
DATETIME занимает 8 байт.
TIMESTAMP занимает (пока еще) 4 байта.
Короче, размеры отличаются не на порядок.

Кроме того, я не очень себе представляю, о каком обновлении идет речь...

   
 
 автор: kis-kis   (27.01.2007 в 17:43)   письмо автору
 
   для: Trianon   (27.01.2007 в 17:14)
 

А как изменить данное условие, чтобы выводились 3 значения наиболее приближенные к данному времени, но только в большую сторону... Чтобы время меньше текущего уже не выводилось.

И еще если использовать данный тип поля - TIMESTAMP.

То процесс обновления данных (около 2000 строк) будет очень долгим, (речь идет о программе ТВ), т.е. использовав тип поля time - необходимо было заменить всего лишь время 00:00:00, а теперь предется менять уже 0000-00-00 00:00:00.

Тогда нельзя ли как-то упростить обновление данных?

   
 
 автор: Trianon   (27.01.2007 в 17:14)   письмо автору
 
   для: kis-kis   (27.01.2007 в 16:45)
 

Если бы tm было типа DATETIME или TIMESTAMP
Запрос мог бы быть таким:

SELECT * FROM table 
ORDER BY ABS(UNIX_TIMESTAMP(tm)-UNIX_TIMESTAMP())
LIMIT 3 


В принципе, при хранении чистого таймштампа в поле INT можно было бы написать еще проще

SELECT * FROM table 
ORDER BY ABS(tm-UNIX_TIMESTAMP())
LIMIT 3 

Но это уже за счет удобства оперирования временными полями. Так что не стоит.

   
 
 автор: kis-kis   (27.01.2007 в 16:45)   письмо автору
 
   для: Trianon   (27.01.2007 в 16:40)
 

А какой формат был бы лучше?

Этот - timestamp?

Если будет данный формат, то тогда как будет выглядеть запрос?

   
 
 автор: Trianon   (27.01.2007 в 16:40)   письмо автору
 
   для: kis-kis   (27.01.2007 в 15:44)
 

Вам придется делать что-то похожее на

SELECT * FROM table 
ORDER BY ABS(UNIX_TIMESTAMP(concat(CURDATE(),' ',tm))-UNIX_TIMESTAMP(NOW()))
LIMIT 3

А всё потому, что формат выбран неудачно....

   
 
 автор: kis-kis   (27.01.2007 в 15:44)   письмо автору
 
   для: kis-kis   (26.01.2007 в 17:14)
 

Время в базе в формате time, как вывести 3 значения наиболее приближенные к текущему времени?

Например, сейчас 15.30 - следовательно нужно выбрать три значения максимально приближенные к данному времени...
Спасибо.

   
 
 автор: kis-kis   (26.01.2007 в 17:14)   письмо автору
 
   для: Trianon   (26.01.2007 в 17:08)
 

Спасибо, все отлично работает! :-)

   

Сообщения:  [1-10]   [11-18] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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