Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день, подскажите пожалуйста как объединить все столбцы таблицы в один.
Т.е. запрос "SELECT * FROM `users` WHERE `id`=1;" возвращает табличку:
1 | admin | admin@nasa.gov | qwerty | 01.09.1939
а нужна строка "1,admin,admin@nasa.gov,qwerty,01.09.1939". Имена и количество столбцов до запроса не известны, но их много .
Неактивен
"Склеить" поля можно функцией concat.
Если же столбцы неизвестны (почему, к слову, неизвестны?), то боюсь, что придётся как-то шаманить с
SHOW COLUMNS FROM table или залезая в information_schema ( http://dev.mysql.com/doc/refman/5.0/en/ … table.html )
Неактивен
deadka написал:
Если же столбцы неизвестны (почему, к слову, неизвестны?), то боюсь, что придётся как-то шаманить с SHOW COLUMNS FROM table или залезая в information_schema ( http://dev.mysql.com/doc/refman/5.0/en/ … table.html )
Имена известны, но от них нет толку - в таблице 78 колонок, а максимальная длина запроса ограничена 200-250 символами.
Неактивен
Откуда такое ограничение на длину запроса?
Неактивен
deadka написал:
Откуда такое ограничение на длину запроса?
Запросы направляются не напрямую в базу, а через промежуточный сервер по специальному протоколу. В этом протоколе есть байт, который отвечает за размер команды для этого сервера. Т.е. больше 255 байт я серверу отправить не могу.
Неактивен
deadka написал:
Если же столбцы неизвестны (почему, к слову, неизвестны?), то боюсь, что придётся как-то шаманить с SHOW COLUMNS FROM table или залезая в information_schema ( http://dev.mysql.com/doc/refman/5.0/en/ … table.html )
Не получается использовать результат подзапроса как часть запроса:
Неактивен
Можно так, по извращаться :-)
Неактивен
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;
Что за @tmp вы там всучили ?
Скопируйте запрос. Он рабочий.
Каждая строка отдельный запрос.
В
Отредактированно evgeny (19.03.2013 17:01:47)
Неактивен
evgeny написал:
Что за @tmp вы там всучили ?
Скопируйте запрос. Он рабочий.
Каждая строка отдельный запрос.
Мне с сервера не приходит результат, пишет просто что запрос успешно выполнен. Наверняка это ошибка в реализации, но с этим пока ничего не сделать. Я хотел чтобы результат запроса вернулся в переменную tmp и потом через select его вывести.
Кстати, phpMyAdmin тоже не выводит, только пишет сколько строк найдено.
Отредактированно Euler (19.03.2013 17:14:28)
Неактивен