Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Запрос в базу MySql (Сортировка одной строки)

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Вопрос по статье: "Динамическое создание изображений средствами PHP"
nurlank
Отправлено: 05 Июля, 2012 - 11:54:37
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




Доброго времени суток!
Эту тему можно назвать продолжением прошлой темы http://forum.php.su/topic.php?fo...8&topic=3784


У меня имеется некая база на MySQL:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  -- Database: `qw`
  3.  
  4. -- Table structure for table `log`
  5.  
  6. CREATE TABLE IF NOT EXISTS `log` (
  7.   `month` date NOT NULL,
  8.   `status` text NOT NULL
  9. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
  10.  
  11. INSERT INTO `log` (`month`, `status`) VALUES
  12. ('2012-01-17', 'success'),
  13. ('2012-01-03', 'error'),
  14. ('2012-02-19', 'success'),
  15. ('2012-02-03', 'error'),
  16. ('2012-02-03', 'error'),
  17. ('2012-03-09', 'error'),
  18. ('2012-03-09', 'error'),
  19. ('2012-03-15', 'error'),
  20. ('2012-03-30', 'success'),
  21. ('2012-04-15', 'error'),
  22. ('2012-04-16', 'error'),
  23. ('2012-05-21', 'error'),
  24. ('2012-05-22', 'error'),
  25. ('2012-06-01', 'error'),
  26. ('2012-06-06', 'error');
  27.  

Использую следующий код:
PHP:
скопировать код в буфер обмена
  1.  
  2.  $rVisitsResult = mysql_query("SELECT GROUP_CONCAT(t.s) FROM (SELECT COUNT(*) s FROM `log` WHERE status='error' GROUP BY `month` ) t");
  3.  $array = mysql_fetch_row($rVisitsResult);
  4.   $visites=( $array);


чтобы увидеть значение использовал:

PHP:
скопировать код в буфер обмена
  1. $array = mysql_fetch_row($rVisitsResult);
  2.    echo json_encode($array );  


данные выходят следующим образом:

Получается не корректный рисунок,т.е. рисует только первый столбик и выходит значение в вверху : 1,2,1,2,2,1,1,1


Теперь по подробнее опишу:

Мне нужно чтобы ответ получился следующем образом:

Число ошибок по разбитым месяцам, месяцы поставить по возрастанию(Это для инфо):

01 месяц - 1 error
02 месяц - 2 error
03 месяц - 4 error
04 месяц - 2 error
05 месяц - 2 error
06 месяц - 2 error

Из того как я описал выше, должен выйти такой ответ:


Что у меня получается в данное время(из запроса который я использую выше $rVisitsResult=...):

Число ошибок сортированным месяцам и дням(Должен быть только по месяцам), месяцы стоят по возрастанию(Это для инфо)

2012.01.03 -1 error
2012.02.03 -2 error
2012.03.09 -2 error
2012.03.15 -1 error
2012.04.15 -1 error
2012.04.16 -1 error
2012.05.21 -1 error
2012.05.22 -1 error
2012.06.01 -1 error
2012.06.06 -1 error


Из того как я описал получаю такой ответ:
(Должен быть каждому значению отдельная кавычка: "1","2"...)


Прошу Всех, помочь мне с запросом. Какой должен быть правильный запрос?
 
 Top
tuareg
Отправлено: 05 Июля, 2012 - 12:16:54
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Добавьте поле, в которое сохраняйте год и месяц
2012-04-03==>201204
И по нему группируйте.
Чтобы получить нужную строку не используйте GROUP_CONCAT. А выбирайте массив, потом join и получите то что Вам надо
 
 Top
nurlank
Отправлено: 09 Июля, 2012 - 11:22:51
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




[quote=tuareg][/quote]

Не могли бы Вы, написать по точнее. Я из ваших слов мало что понял.
К Вам просьба, маленький примерик если можно ... Подмигивание
 
 Top
tuareg
Отправлено: 09 Июля, 2012 - 11:49:40
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CREATE TABLE `log` (
  3.   `month` date NOT NULL,
  4.   `status` enum('error','success') NOT NULL DEFAULT 'error' COMMENT 'если еще есть какие статусы ошибок просто добавь',
  5.   `myMonth` int(11) UNSIGNED NOT NULL DEFAULT '0',
  6.   KEY `myIndex` (`status`,`myMonth`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
  8. INSERT INTO `log` (`month`, `status`,`myMonth`) VALUES
  9. ('2012-01-17', 'success',DATE_FORMAT(`month`,'%Y%m')),
  10. ('2012-01-03', 'error',DATE_FORMAT(`month`,'%Y%m')),
  11. ('2012-02-19', 'success',DATE_FORMAT(`month`,'%Y%m')),
  12. ('2012-02-03', 'error',DATE_FORMAT(`month`,'%Y%m')),
  13. ('2012-02-03', 'error',DATE_FORMAT(`month`,'%Y%m')),
  14. ('2012-03-09', 'error',DATE_FORMAT(`month`,'%Y%m')),
  15. ('2012-03-09', 'error',DATE_FORMAT(`month`,'%Y%m')),
  16. ('2012-03-15', 'error',DATE_FORMAT(`month`,'%Y%m')),
  17. ('2012-03-30', 'success',DATE_FORMAT(`month`,'%Y%m')),
  18. ('2012-04-15', 'error',DATE_FORMAT(`month`,'%Y%m')),
  19. ('2012-04-16', 'error',DATE_FORMAT(`month`,'%Y%m')),
  20. ('2012-05-21', 'error',DATE_FORMAT(`month`,'%Y%m')),
  21. ('2012-05-22', 'error',DATE_FORMAT(`month`,'%Y%m')),
  22. ('2012-06-01', 'error',DATE_FORMAT(`month`,'%Y%m')),
  23. ('2012-06-06', 'error',DATE_FORMAT(`month`,'%Y%m'));/**/
  24.  

Запрос будет
PHP:
скопировать код в буфер обмена
  1.  
  2. $rVisitsResult = mysql_query'SELECT COUNT(*) s FROM `log` WHERE `status`=\'error\' GROUP BY `myMonth`;');
  3. $array=array();
  4. while($result = mysql_fetch_row($rVisitsResult)){
  5.  $array[] =$result[0];
  6. }
  7. echo '<pre>';
  8.  print_r($array);
  9. echo '</pre>';
  10.  

Даже лучше так
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CREATE TABLE `log` (
  3.   `month` date NOT NULL,
  4.   `status` enum('error','success') NOT NULL DEFAULT 'error' COMMENT 'если еще есть какие статусы ошибок просто добавь',
  5.   `myMonth` int(11) UNSIGNED NOT NULL DEFAULT '0',
  6.   KEY `myIndex` (`myMonth`,`status`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
  8.  

А запрос такой

CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT COUNT(*) s FROM `log` GROUP BY `myMonth`,`status` HAVING `status`='error';
  3.  

(Отредактировано автором: 09 Июля, 2012 - 12:49:28)

 
 Top
nurlank
Отправлено: 09 Июля, 2012 - 13:08:49
Post Id



Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




tuareg

Большое Вам спасибо...
Ваш пример тоже мне помог.

Я нашел другой оптимальный ответ: Закатив глазки

PHP:
скопировать код в буфер обмена
  1.  
  2.   $rgVisites = array();
  3.  $rVisitsResult = mysql_query("SELECT month, COUNT(*) s FROM `log` WHERE status='error' GROUP BY MONTH(`month`)");
  4.   while ($rgRow = mysql_fetch_assoc($rVisitsResult)) {
  5.    $rgVisites[] = $rgRow['s'];
  6.    }
  7.    $visites= ($rgVisites);
  8.  
  9.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB