SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 10.04.2012 14:51:33

apulchra
Участник
Зарегистрирован: 10.04.2012
Сообщений: 3

Объединить строки запроса или куда делся GROUP_CONCAT() и есть ли он?

Выполняю запрос:

SELECT project_name, tasks.task_name, task_log.task_log_description, task_log.task_log_task FROM projects, tasks, user_tasks, task_log WHERE tasks.task_id=user_tasks.task_id AND user_tasks.user_id= '30' AND task_log.task_log_creator= '31' AND tasks.task_id=task_log.task_log_task AND tasks.task_project=projects.project_id;
 


Собственно получаю результат:

+-----------------------------------+------------------------------------------------------+-------------------------------------+---------------+
| project_name                        | task_name                                                   | task_log_description                | task_log_task |
+-----------------------------------+------------------------------------------------------+-------------------------------------+---------------+
| АИИС ЕБК                            | Акт по предиспытаниям                                 | Акт оформлен                         |              148 |
| Обслуживание Спетр-ТМ        | Подготовить акты по Спектр-ТМ                      | Акт завизирован                     |            1266 |
| Обслуживание Спетр-ТМ        | Подготовить акты по Спектр-ТМ                      | Акт оформлен и сдан               |            1266 |
| ВОЛС Восточная-Зональная    | Оформление фин. документов                        | Акт завизирован                     |              436 |
| ВОЛС Восточная-Зональная    | Оформление фин. документов                        | Акт у меня                             |              436 |
+--------- -------------------------+------------------------------------------------------+-------------------------------------+---------------+
5 rows in set (0.00 sec)

Нужно объединить строки с одинаковым project_name, task_name и task_log_task, что-бы результат запроса выглядел так:

+-----------------------------------+-------------------------------------------------------+------------------------------------------------+---------------+
| project_name                        | task_name                                                    | task_log_description                            | task_log_task |
+-----------------------------------+-------------------------------------------------------+------------------------------------------------+---------------+
| АИИС ЕБК                            | Акт по предиспытаниям                                  | Акт оформлен                                     |              148 |
| Обслуживание Спетр-ТМ        | Подготовить акты по Спектр-ТМ                       | Акт завизирован , Акт оформлен и сдан  |            1266 |
| ВОЛС Восточная-Зональная    | Оформление фин. документов                         | Акт завизирован , Акт у меня                |              436 |
+--------- -------------------------+-------------------------------------------------------+------------------------------------------------+---------------+

Как это сделать? Пытался экспериментировать с функцией GROUP_CONCAT () но выдаёт ошибку:
ERROR 1630 (42000): FUNCTION w2p_db.GROUP_CONCAT does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual
Версия mysql 5.1.41, в этой версии правда нет этой функции? Как еще можно решить эту задачу?

Отредактированно apulchra (10.04.2012 14:54:51)

Неактивен

 

#2 10.04.2012 14:58:04

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Объединить строки запроса или куда делся GROUP_CONCAT() и есть ли он?

В MySQL 5.0 есть group_concat.
Скорее дело в том, что функция group_concat работает при наличии группировки, которой у Вас в запросе нету.
См здесь.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 11.04.2012 05:51:32

apulchra
Участник
Зарегистрирован: 10.04.2012
Сообщений: 3

Re: Объединить строки запроса или куда делся GROUP_CONCAT() и есть ли он?

Ну вот, допустим, сформируем простой запрос из одной таблицы:

SELECT task_log_task, task_log_description FROM task_log WHERE task_log_creator='31';  
Получим ответ:

+---------------+-------------------------------------+
| task_log_task | task_log_description                |
+---------------+-------------------------------------+
|           148  | Акт оформлен                           |
|          1266 | Акт завизирован                       |
|          1266 | Акт оформлен и сдан                 |
|           436  | Акт завизирован                       |
|           436  | Акт у меня                               |
+---------------+-------------------------------------+
5 rows in set (0.00 sec)

Нужно объединить строки с одинаковым task_log_task, по логике руководства GROUP_CONCAT () делаю такой запрос:
SELECT task_log_task, GROUP_CONCAT (task_log_description) FROM task_log WHERE task_log_creator='31' GROUP BY task_log_task;
И получаю ошибку:
ERROR 1630 (42000): FUNCTION w2p_db.GROUP_CONCAT does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual
Можно указать, где я ошибся в запросе?

Отредактированно apulchra (11.04.2012 09:52:27)

Неактивен

 

#4 11.04.2012 09:53:29

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Объединить строки запроса или куда делся GROUP_CONCAT() и есть ли он?

Да, верно, после указывания GROUP_CONCAT не нужно ставить пробел.

Код:

mysql> create table t_5601(task_log_task int, task_log_description varchar(255));
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t_5601 values(148,'Act oformlen'),(1266,'Act zavizirovan'),(1266,'Act oformlen i sdan'),(436,'Act zavizirovan'),(436,'Act u menya');
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select * from t_5601;
+---------------+----------------------+
| task_log_task | task_log_description |
+---------------+----------------------+
|           148 | Act oformlen         |
|          1266 | Act zavizirovan      |
|          1266 | Act oformlen i sdan  |
|           436 | Act zavizirovan      |
|           436 | Act u menya          |
+---------------+----------------------+
5 rows in set (0.00 sec)

mysql> SELECT task_log_task, GROUP_CONCAT (task_log_description) FROM t_5601 GROUP BY task_log_task;
ERROR 1630 (42000): FUNCTION sqlinfo.GROUP_CONCAT does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual
mysql> SELECT task_log_task, GROUP_CONCAT(task_log_description) FROM t_5601 GROUP BY task_log_task;
+---------------+-------------------------------------+
| task_log_task | GROUP_CONCAT(task_log_description)  |
+---------------+-------------------------------------+
|           148 | Act oformlen                        |
|           436 | Act zavizirovan,Act u menya         |
|          1266 | Act zavizirovan,Act oformlen i sdan |
+---------------+-------------------------------------+
3 rows in set (0.00 sec)

SELECT task_log_task, GROUP_CONCAT(task_log_description) FROM task_log WHERE task_log_creator='31' GROUP BY task_log_task;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 11.04.2012 11:15:32

apulchra
Участник
Зарегистрирован: 10.04.2012
Сообщений: 3

Re: Объединить строки запроса или куда делся GROUP_CONCAT() и есть ли он?

Спасибо, работает. Два дня сижу... зато узнал много нового.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson