SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 10.03.2010 23:06:08

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Объединить строки с одинаковым id

Ребята, привет всем!

Подскажите, пожалуйста как выполнить следующее:
Имеется таблица:


+----+---------+
| id |   qwe   |
+----+---------+
|  4 |       1 |
|  4 |       2 |
|  6 |      11 |
+----+---------+
 
Подскажите можно ли составить запрос, в результате выполнения которого я смогу получить таблицу вида:

+----+---------+---------+
| id |  qwe1   |  qwe2   |
+----+---------+---------+
|  1 |       1 |       2 | qwe1, qwe2 - значения qwe из таблицы 1 с одинаковым id=4
|  2 |      11 |    null | qwe1 - значение qwe из таблицы 1 с id=6 (только одно)
+----+---------+---------+
 
То есть значения колонки qwe с одинаковыми id соединены в строки в таблице 2.

Заранее спасибо и извините если сумбурно получилось объяснить суть проблемы.

Отредактированно FiMko (10.03.2010 23:24:19)

Неактивен

 

#2 11.03.2010 00:06:51

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Объединить строки с одинаковым id

А если будет в исходной таблице еще одна строка с id=4? делать тогда
еще одну колонку?

Ближе всего (из простых) вот такой зверек:
SET @a := 0;
SELECT @a := @a + 1 AS id, GROUP_CONCAT(qwe)
FROM tablename
GROUP BY tablename.id;

Неактивен

 

#3 11.03.2010 00:31:53

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Объединить строки с одинаковым id

Добрый ты, Паулюс, не чтобы написать хорошему человеку на сон грядущий невдолбенную конструкцию wink


test >create table `таблица` ( id int not null auto_increment primary key, qwe1 int, qwe2 int);
Query OK, 0 rows affected (0.66 sec)

test >insert into `таблица` (qwe1,qwe2) select if(locate(',',group_concat(qwe)),substring(group_concat(qwe),1,locate(',',group_concat(qwe))-1),group_concat(qwe)) qwe1, if(locate(',',group_concat(qwe)),substring(group_concat(qwe),locate(',',group_concat(qwe))+1),null) qwe2 from (select 4 id,1 qwe union select 4,2 union select 6,11) t group by id;
Query OK, 2 rows affected (0.45 sec)
Records: 2  Duplicates: 0  Warnings: 0

test >select * from `таблица`;
+----+------+------+
| id | qwe1 | qwe2 |
+----+------+------+
|  1 |    1 |    2 |
|  2 |   11 | NULL |
+----+------+------+
2 rows in set (0.00 sec)
 


А насчет ещё одной строки с id=4, можно посоветовать написать процедуру, которая будет автоматически определять нужное кол-во колонок и, вообще, делать все сама roll

Неактивен

 

#4 11.03.2010 00:41:35

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Объединить строки с одинаковым id

Т.е. ты правда считаешь, что моя конструкция сложнее твоей, да? wink

Но вообще, мне твой способ нравится. Можно написать процедуру, которая
будет бежать курсором по первой таблице, смотреть, есть ли уже строки во
второй, которые нужны, и, если есть, добавлять еще один столбец.

Но писать это не буду, даже не просите wink

Неактивен

 

#5 11.03.2010 11:48:36

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: Объединить строки с одинаковым id

paulus написал:

А если будет в исходной таблице еще одна строка с id=4? делать тогда
еще одну колонку?

Да, мысль была именно такова...

paulus, vasya, спасибо за помощь! Буду разбираться в ваших вариантах smile

Отредактированно FiMko (11.03.2010 11:50:32)

Неактивен

 

Board footer

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