|
|
|
| Формат вывода времени - 00:00:00, а как сделать чтобы время выводилось без секунд, т.е. 00:00?
Спасибо. | |
|
|
|
|
|
|
|
для: kis-kis
(26.01.2007 в 16:16)
| | DATE_FORMAT(time, '%H:%i') | |
|
|
|
|
|
|
|
для: Trianon
(26.01.2007 в 16:27)
| | Время берется из базы (формат TIME)
Ошибка:
Fatal error: Call to undefined function: date_format() | |
|
|
|
|
|
|
|
для: kis-kis
(26.01.2007 в 16:31)
| | Это MySQL-ная функция , а не PHP-шная.
SELECT DATE_FORMAT(поле_где_живет_время, '%H:%i') FROM таблица
|
| |
|
|
|
|
|
|
|
для: 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? | |
|
|
|
|
|
|
|
для: kis-kis
(26.01.2007 в 16:39)
| | Можно. Явно перечислив нужные поля и добавив к ним эту конструкцию. | |
|
|
|
|
|
|
|
для: 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()."");
|
Так время вообще не выводится... | |
|
|
|
|
|
|
|
для: 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()."");
|
| |
|
|
|
|
|
|
|
для: Trianon
(26.01.2007 в 17:08)
| | Спасибо, все отлично работает! :-) | |
|
|
|
|
|
|
|
для: kis-kis
(26.01.2007 в 17:14)
| | Время в базе в формате time, как вывести 3 значения наиболее приближенные к текущему времени?
Например, сейчас 15.30 - следовательно нужно выбрать три значения максимально приближенные к данному времени...
Спасибо. | |
|
|
|
|
|
|
|
для: kis-kis
(27.01.2007 в 15:44)
| | Вам придется делать что-то похожее на
SELECT * FROM table
ORDER BY ABS(UNIX_TIMESTAMP(concat(CURDATE(),' ',tm))-UNIX_TIMESTAMP(NOW()))
LIMIT 3
|
А всё потому, что формат выбран неудачно.... | |
|
|
|
|
|
|
|
для: Trianon
(27.01.2007 в 16:40)
| | А какой формат был бы лучше?
Этот - timestamp?
Если будет данный формат, то тогда как будет выглядеть запрос? | |
|
|
|
|
|
|
|
для: 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
|
Но это уже за счет удобства оперирования временными полями. Так что не стоит. | |
|
|
|
|
|
|
|
для: Trianon
(27.01.2007 в 17:14)
| | А как изменить данное условие, чтобы выводились 3 значения наиболее приближенные к данному времени, но только в большую сторону... Чтобы время меньше текущего уже не выводилось.
И еще если использовать данный тип поля - TIMESTAMP.
То процесс обновления данных (около 2000 строк) будет очень долгим, (речь идет о программе ТВ), т.е. использовав тип поля time - необходимо было заменить всего лишь время 00:00:00, а теперь предется менять уже 0000-00-00 00:00:00.
Тогда нельзя ли как-то упростить обновление данных? | |
|
|
|
|
|
|
|
для: 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 байта.
Короче, размеры отличаются не на порядок.
Кроме того, я не очень себе представляю, о каком обновлении идет речь... | |
|
|
|
|
|
|
|
для: 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
А как оно должно выглядеть? | |
|
|
|
|
|
|
|
для: 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 на выборке результатов) имя поменять. | |
|
|
|
|
|
|
|
для: Trianon
(27.01.2007 в 19:58)
| | Спасибо. Все исправил. | |
|
|
|