SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 19.03.2013 13:13:06

Euler
Участник
Зарегистрирован: 19.03.2013
Сообщений: 6

объединение всех столбцов в один

Добрый день, подскажите пожалуйста как объединить все столбцы таблицы в один.
Т.е. запрос "SELECT * FROM `users` WHERE `id`=1;" возвращает табличку:
1 | admin | admin@nasa.gov | qwerty | 01.09.1939
а нужна строка "1,admin,admin@nasa.gov,qwerty,01.09.1939". Имена и количество столбцов до запроса не известны, но их много smile .

Неактивен

 

#2 19.03.2013 13:27:33

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

Re: объединение всех столбцов в один

"Склеить" поля можно функцией concat.
Если же столбцы неизвестны (почему, к слову, неизвестны?), то боюсь, что придётся как-то шаманить с
SHOW COLUMNS FROM table или залезая в information_schema ( http://dev.mysql.com/doc/refman/5.0/en/ … table.html )


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

Неактивен

 

#3 19.03.2013 13:38:26

Euler
Участник
Зарегистрирован: 19.03.2013
Сообщений: 6

Re: объединение всех столбцов в один

deadka написал:

Если же столбцы неизвестны (почему, к слову, неизвестны?), то боюсь, что придётся как-то шаманить с SHOW COLUMNS FROM table или залезая в information_schema ( http://dev.mysql.com/doc/refman/5.0/en/ … table.html )

Имена известны, но от них нет толку - в таблице 78 колонок, а максимальная длина запроса ограничена 200-250 символами.

Неактивен

 

#4 19.03.2013 13:42:37

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

Re: объединение всех столбцов в один

Откуда такое ограничение на длину запроса?


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

Неактивен

 

#5 19.03.2013 14:00:04

Euler
Участник
Зарегистрирован: 19.03.2013
Сообщений: 6

Re: объединение всех столбцов в один

deadka написал:

Откуда такое ограничение на длину запроса?

Запросы направляются не напрямую в базу, а через промежуточный сервер по специальному протоколу. В этом протоколе есть байт, который отвечает за размер команды для этого сервера. Т.е. больше 255 байт я серверу отправить не могу.

Неактивен

 

#6 19.03.2013 15:35:39

Euler
Участник
Зарегистрирован: 19.03.2013
Сообщений: 6

Re: объединение всех столбцов в один

deadka написал:

Если же столбцы неизвестны (почему, к слову, неизвестны?), то боюсь, что придётся как-то шаманить с SHOW COLUMNS FROM table или залезая в information_schema ( http://dev.mysql.com/doc/refman/5.0/en/ … table.html )

Не получается использовать результат подзапроса как часть запроса:

SELECT (SELECT GROUP_CONCAT(`COLUMN_NAME`) FROM information_schema.COLUMNS WHERE `TABLE_NAME`='users') FROM `users`WHERE `id`=1;

Неактивен

 

#7 19.03.2013 15:55:32

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: объединение всех столбцов в один

Можно так, по извращаться :-)

SET @col_names:='';
SELECT GROUP_CONCAT(`COLUMN_NAME`) into @col_names FROM information_schema.COLUMNS WHERE `TABLE_NAME`='users';
SET @squery:=concat('SELECT ',@col_names,' FROM `users` WHERE `id`=1');
PREPARE stmt1 FROM @squery;
EXECUTE stmt1;

Неактивен

 

#8 19.03.2013 16:46:36

Euler
Участник
Зарегистрирован: 19.03.2013
Сообщений: 6

Re: объединение всех столбцов в один

evgeny написал:

Можно так, по извращаться :-)

SET @col_names:='';
SELECT GROUP_CONCAT(`COLUMN_NAME`) into @col_names FROM information_schema.COLUMNS WHERE `TABLE_NAME`='users';
SET @squery:=concat('SELECT ',@col_names,' FROM `users` WHERE `id`=1');
PREPARE stmt1 FROM @squery;
EXECUTE stmt1;

Спасибо, но у меня почему-то результат не выводится. Пытаюсь сохранить результат в переменной, но вылетает ошибка:

SET @col_names:='';
SELECT GROUP_CONCAT(`COLUMN_NAME`) into @col_names FROM information_schema.COLUMNS WHERE `TABLE_NAME`='users';
SET @squery:=concat('SELECT ',@col_names,' into @tmp FROM `users` WHERE `id`=1');
PREPARE stmt1 FROM @squery; #1064 - You have an error in your SQL syntax;
EXECUTE stmt1;

Неактивен

 

#9 19.03.2013 17:00:37

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: объединение всех столбцов в один

SET @col_names:='';
SELECT GROUP_CONCAT(`COLUMN_NAME`) into @col_names FROM information_schema.COLUMNS WHERE `TABLE_NAME`='users';
SET @squery:=concat('SELECT ',@col_names,' into @tmp FROM `users` WHERE `id`=1');
PREPARE stmt1 FROM @squery; #1064 - You have an error in your SQL syntax;
EXECUTE stmt1;

Что за @tmp вы там всучили ? smile
Скопируйте запрос. Он рабочий.
Каждая строка отдельный запрос.
В

SELECT GROUP_CONCAT(`COLUMN_NAME`) into @col_names FROM information_schema.COLUMNS WHERE `TABLE_NAME`='users';

добавьте условие TABLE_SCHEMA= ... чтоб таблица с другой базы туда не попала ...

Отредактированно evgeny (19.03.2013 17:01:47)

Неактивен

 

#10 19.03.2013 17:13:08

Euler
Участник
Зарегистрирован: 19.03.2013
Сообщений: 6

Re: объединение всех столбцов в один

evgeny написал:

Что за @tmp вы там всучили ? smile
Скопируйте запрос. Он рабочий.
Каждая строка отдельный запрос.

Мне с сервера не приходит результат, пишет просто что запрос успешно выполнен. Наверняка это ошибка в реализации, но с этим пока ничего не сделать. Я хотел чтобы результат запроса вернулся в переменную tmp и потом через select его вывести.
Кстати, phpMyAdmin тоже не выводит, только пишет сколько строк найдено.

Отредактированно Euler (19.03.2013 17:14:28)

Неактивен

 

Board footer

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