|
|
|
| Доброе время суток, есть таблица table:
`id` int(9),
`pole1` int(7),
`pole2` int(7),
`dates` varchar(200);
|
в поле `dates` хранится время в UNIX формате
нужно: вывести все месяцы в виде: январь февраль...декабрь, если они имеются в поле dates при условии что pole1>0
делаю так:
<?
$query = mysql_query("SELECT DISTINCT MONTH(`dates`) FROM `table` WHERE `pole1`>0");
while($q = mysql_fetch_assoc($query))
{
$month = array("1"=>"январь",
"2"=>"февраль",
"3"=>"март",
"4"=>"апрель",
"5"=>"май",
"6"=>"июнь",
"7"=>"июль",
"8"=>"август",
"9"=>"сентябрь",
"10"=>"октябрь",
"11"=>"ноябрь",
"12"=>"декабрь");
echo strtr(date('n', $q['dates']), $month)." | ";
}
?>
|
выводит только ЯНВАРЬ, однако в таблице присутствуют первых 7 месяцев
такое чувство что ошибка в запросе, может SELECT MONTH не работает с UNIX форматом
Подскажите как сформировать запрос | |
|
|
|
|
|
|
|
для: chexov
(09.07.2009 в 04:46)
| | `dates` varchar(200);
`dates` TIMESTAMP;
попробуйте
| |
|
|
|
|
|
|
|
для: Valick
(09.07.2009 в 07:36)
| | Сделал в TIMESTAMP, запрос не работает также пробовал в DATATIME, результат один | |
|
|
|
|
|
|
|
для: chexov
(09.07.2009 в 04:46)
| | Придется идти от печки.
А что такое UNIX формат? | |
|
|
|
|
|
|
|
для: Trianon
(09.07.2009 в 09:19)
| | уточняю, это UNIXTIME т.е кол-во секунд с 01.01.1970
>>Что значит идти от печки? | |
|
|
|
|
|
|
|
для: chexov
(09.07.2009 в 09:32)
| | >уточняю, это UNIXTIME т.е кол-во секунд с 01.01.1970
ну тогда и я уточню, что это не просто кол-во секунд с 01.01.1970, а кол-во секунд с момента полуночи с 31.12.1969 на 01.01.1970 в Гринвиче. Хотя в данном случае это менее существенно.
>Что значит идти от печки?
с основных понятий.
Уж коль скоро UNIXTIME это количество секунд, а значит целочисленная величина, то хранить прямо её имеет смысл в формате INT .
Естественно, ни одна функция даты-времени MySQL напрямую с целочисленной величиной секунд unix не работает. Они работают с форматом даты-времени MySQL (точнее одного из ISO стандартов) то есть со строкой YYYY_MM-DD HH:MM:SS .
Для преобразования в формат даты/времени MySQL и обратно имеются функции FROM_UNIXTIME() и UNIX_TIMESTAMP()
Можно также воспользоваться полем типа TIMESTAMP (которое характерно тем, что внутри себя данные хранит в unix-формате, но воспринимает и выдает в формате даты/времени MySQL)
Но это если не боитесь запутаться в потоке преобразований. | |
|
|
|
|
|
|
|
для: Trianon
(09.07.2009 в 10:02)
| | Мне знакомы ЭТИ так называемые основные понятия, вопрос этой темы форума совершенно другой (он обозначен в посте за номером 387067).
Сейчас дата в поле dates хранится в TIMESTAMP (YYYY-MM-DD HH:MM:SS) но цель задачи не достигнута! | |
|
|
|
|
|
|
|
для: chexov
(09.07.2009 в 10:05)
| | какие идеи господа? | |
|
|
|
|
|
|
|
для: chexov
(09.07.2009 в 11:29)
| | А если так?
SELECT MONTH(`dates`) FROM table GROUP BY `dates` HAVING `pole1`>0
|
___
агрегатных функций нет, запрос характеризует "спортивный интерес" | |
|
|
|
|
|
|
|
для: Valick
(09.07.2009 в 12:21)
| | >А если так?
>
SELECT MONTH(`dates`) FROM table GROUP BY `dates` HAVING `pole1`>0
|
а проверяли перед тем как отправить? | |
|
|
|
|
|
|
|
для: Root
(09.07.2009 в 12:31)
| | а не проверял... спросили идею а не готовый код
____
ладно согласен ступил немного) про время забыл | |
|
|
|
|
|
|
|
для: Valick
(09.07.2009 в 12:33)
| | 1) очень мило править посты на которые уже дан ответ..
2) и в чём же идея?
Проехали
| |
|
|
|
|
|
|
|
для: Root
(09.07.2009 в 12:38)
| | нажал исправить чуть раньше, чем Вы написали поэтому не видел вашего поста.
Я часто сначала пишу основную мысль, а потом редактирую (копипастю например из других постов, грамматические ошибки исправляю и тд)
идея в том чтобы найти причину по которой другой запрос у автора топика не работает. | |
|
|
|
|
|
|
|
для: chexov
(09.07.2009 в 11:29)
| | $month = array - в цикле это плохо ;) | |
|
|
|
|
|
|
|
для: chexov
(09.07.2009 в 10:05)
| | >Сейчас дата в поле dates хранится в TIMESTAMP (YYYY-MM-DD HH:MM:SS)
И сервер выдает один январь?
Тогда приложите фрагмент дампа таблицы.
Как-то в это с трудом верится.
>но цель задачи не достигнута!
тут я пожалуй промолчу. | |
|
|
|
|
|
|
|
для: Trianon
(09.07.2009 в 12:23)
| | Уважаемый, сейчас ВООБЩЕ ничего не выводится, даже январь
дамп таков:
1|0|0|2009-01-21 16:20:00
2|300|0|2009-01-21 16:20:00
3|100|0|2009-01-25 17:00:00
4|0|0|2009-02-21 16:50:00
5|500|0|2009-02-11 11:20:00
6|100|0|2009-01-19 19:00:00
|
и т.д
запрос тот же
<?
$query = mysql_query("SELECT DISTINCT MONTH(`dates`) FROM `table` WHERE `pole1`>0");
while($q = mysql_fetch_assoc($query))
{
echo $q['dates'];
}
?>
|
| |
|
|
|
|
|
|
|
для: chexov
(09.07.2009 в 12:55)
| | а что такое $q['dates'] ??
1) допишите alias.
2) echo $month[$q['dates']] | |
|
|
|
|
|
|
|
для: Root
(09.07.2009 в 13:00)
| | откуда вы взяли $month | |
|
|
|
|
|
|
|
для: chexov
(09.07.2009 в 13:08)
| | >откуда вы взяли $month
из вашего перевого поста | |
|
|
|
|
|
|
|
для: chexov
(09.07.2009 в 12:55)
| | Наверное нужно вывести
echo $q['MONTH(`dates`)'];
| не находите?
Впрочем, я бы не мучился с таким страшным ключом, применил бы алиас к этому полю и вытащил бы его по алиасу.
>дамп таков:
Это не дамп.
Дамп это то, что можно засунуть, к примеру в phpMyAdmin (или еще какой клиент) и он создаст таблицы и наполнит их строками. | |
|
|
|
|
|
|
|
для: Trianon
(09.07.2009 в 14:09)
| | думаю ход мыслей я уловил, спасибо за участие | |
|
|
|