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

Форум MySQL

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

 

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

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

тема: Уникальная выборка
 
 автор: chexov   (09.07.2009 в 04:46)   письмо автору
 
 

Доброе время суток, есть таблица 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 форматом
Подскажите как сформировать запрос

  Ответить  
 
 автор: Valick   (09.07.2009 в 07:36)   письмо автору
 
   для: chexov   (09.07.2009 в 04:46)
 

`dates` varchar(200);
`dates` TIMESTAMP;
попробуйте

  Ответить  
 
 автор: chexov   (09.07.2009 в 07:48)   письмо автору
 
   для: Valick   (09.07.2009 в 07:36)
 

Сделал в TIMESTAMP, запрос не работает также пробовал в DATATIME, результат один

  Ответить  
 
 автор: Trianon   (09.07.2009 в 09:19)   письмо автору
 
   для: chexov   (09.07.2009 в 04:46)
 

Придется идти от печки.
А что такое UNIX формат?

  Ответить  
 
 автор: chexov   (09.07.2009 в 09:32)   письмо автору
 
   для: Trianon   (09.07.2009 в 09:19)
 

уточняю, это UNIXTIME т.е кол-во секунд с 01.01.1970
>>Что значит идти от печки?

  Ответить  
 
 автор: Trianon   (09.07.2009 в 10:02)   письмо автору
 
   для: 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)
Но это если не боитесь запутаться в потоке преобразований.

  Ответить  
 
 автор: chexov   (09.07.2009 в 10:05)   письмо автору
 
   для: Trianon   (09.07.2009 в 10:02)
 

Мне знакомы ЭТИ так называемые основные понятия, вопрос этой темы форума совершенно другой (он обозначен в посте за номером 387067).

Сейчас дата в поле dates хранится в TIMESTAMP (YYYY-MM-DD HH:MM:SS) но цель задачи не достигнута!

  Ответить  
 
 автор: chexov   (09.07.2009 в 11:29)   письмо автору
 
   для: chexov   (09.07.2009 в 10:05)
 

какие идеи господа?

  Ответить  
 
 автор: Valick   (09.07.2009 в 12:21)   письмо автору
 
   для: chexov   (09.07.2009 в 11:29)
 

А если так?
SELECT MONTH(`dates`) FROM table GROUP BY `dates` HAVING `pole1`>0

___
агрегатных функций нет, запрос характеризует "спортивный интерес"

  Ответить  
 
 автор: Root   (09.07.2009 в 12:31)   письмо автору
 
   для: Valick   (09.07.2009 в 12:21)
 

>А если так?
>
SELECT MONTH(`dates`) FROM table GROUP BY `dates` HAVING `pole1`>0


а проверяли перед тем как отправить?

  Ответить  
 
 автор: Valick   (09.07.2009 в 12:33)   письмо автору
 
   для: Root   (09.07.2009 в 12:31)
 

а не проверял... спросили идею а не готовый код
____
ладно согласен ступил немного) про время забыл

  Ответить  
 
 автор: Root   (09.07.2009 в 12:38)   письмо автору
 
   для: Valick   (09.07.2009 в 12:33)
 

1) очень мило править посты на которые уже дан ответ..
2) и в чём же идея?

Проехали

  Ответить  
 
 автор: Valick   (09.07.2009 в 12:44)   письмо автору
 
   для: Root   (09.07.2009 в 12:38)
 

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

  Ответить  
 
 автор: Valick   (09.07.2009 в 12:29)   письмо автору
 
   для: chexov   (09.07.2009 в 11:29)
 

$month = array - в цикле это плохо ;)

  Ответить  
 
 автор: Trianon   (09.07.2009 в 12:23)   письмо автору
 
   для: chexov   (09.07.2009 в 10:05)
 

>Сейчас дата в поле dates хранится в TIMESTAMP (YYYY-MM-DD HH:MM:SS)
И сервер выдает один январь?
Тогда приложите фрагмент дампа таблицы.
Как-то в это с трудом верится.


>но цель задачи не достигнута!
тут я пожалуй промолчу.

  Ответить  
 
 автор: chexov   (09.07.2009 в 12:55)   письмо автору
 
   для: 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']; 
  } 
?>

  Ответить  
 
 автор: Root   (09.07.2009 в 13:00)   письмо автору
 
   для: chexov   (09.07.2009 в 12:55)
 

а что такое $q['dates'] ??
1) допишите alias.
2) echo $month[$q['dates']]

  Ответить  
 
 автор: chexov   (09.07.2009 в 13:08)   письмо автору
 
   для: Root   (09.07.2009 в 13:00)
 

откуда вы взяли $month

  Ответить  
 
 автор: Root   (09.07.2009 в 13:11)   письмо автору
 
   для: chexov   (09.07.2009 в 13:08)
 

>откуда вы взяли $month

из вашего перевого поста

  Ответить  
 
 автор: Trianon   (09.07.2009 в 14:09)   письмо автору
 
   для: chexov   (09.07.2009 в 12:55)
 

Наверное нужно вывести
echo $q['MONTH(`dates`)']; 
не находите?

Впрочем, я бы не мучился с таким страшным ключом, применил бы алиас к этому полю и вытащил бы его по алиасу.


>дамп таков:
Это не дамп.
Дамп это то, что можно засунуть, к примеру в phpMyAdmin (или еще какой клиент) и он создаст таблицы и наполнит их строками.

  Ответить  
 
 автор: chexov   (09.07.2009 в 17:59)   письмо автору
 
   для: Trianon   (09.07.2009 в 14:09)
 

думаю ход мыслей я уловил, спасибо за участие

  Ответить  
Rambler's Top100
вверх

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