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

Форум MySQL

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

 

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

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

тема: Вывод времени
 
 автор: kis-kis   (26.01.2007 в 16:16)   письмо автору
 
 

Формат вывода времени - 00:00:00, а как сделать чтобы время выводилось без секунд, т.е. 00:00?
Спасибо.

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

DATE_FORMAT(time, '%H:%i')

   
 
 автор: kis-kis   (26.01.2007 в 16:31)   письмо автору
 
   для: Trianon   (26.01.2007 в 16:27)
 

Время берется из базы (формат TIME)

Ошибка:
Fatal error: Call to undefined function: date_format()

   
 
 автор: Trianon   (26.01.2007 в 16:37)   письмо автору
 
   для: kis-kis   (26.01.2007 в 16:31)
 

Это MySQL-ная функция , а не PHP-шная.

SELECT DATE_FORMAT(поле_где_живет_время, '%H:%i') FROM таблица 

   
 
 автор: kis-kis   (26.01.2007 в 16:39)   письмо автору
 
   для: Trianon   (26.01.2007 в 16:37)
 

А если уже есть такой запрос:


$query = "SELECT * FROM tv WHERE channel='1' and data=CURRENT_DATE()";
$result=mysql_query($query) or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");


Можно ли подставить в него date_format?

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

Можно. Явно перечислив нужные поля и добавив к ним эту конструкцию.

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

Вот так?


$query = "SELECT DATE_FORMAT(ntime, '%H:%i'), title FROM tv WHERE channel='1' and data=CURRENT_DATE()";
$result=mysql_query($query) or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");


Так время вообще не выводится...

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

Возможно, нужно будет добавить псевдоним столбцу:

$query = "SELECT DATE_FORMAT(ntime, '%H:%i') AS ntime, title 
    FROM tv WHERE channel='1' and data=CURRENT_DATE()"; 
$result=mysql_query($query) 
  or die("<B>Error ".mysql_errno()." :</B> ".mysql_error().""); 

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

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

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

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

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

   
 
 автор: 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 в 16:45)   письмо автору
 
   для: Trianon   (27.01.2007 в 16:40)
 

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

Этот - timestamp?

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

   
 
 автор: 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 в 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 в 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 в 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 в 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   (29.01.2007 в 10:10)   письмо автору
 
   для: Trianon   (27.01.2007 в 19:58)
 

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

   
Rambler's Top100
вверх

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