Как использовать результаты запроса в качестве имен столбцов в операторе SELECT - PullRequest
4 голосов
/ 03 декабря 2011

Моя конечная цель - создать представление сводной таблицы в MySQL с динамическими столбцами на основе содержимого другой таблицы. В данный момент я пытаюсь продолжить с того места, где останавливается artfulsoftware ; прямо сейчас я могу запросить результаты, которые дают мне желаемые имена столбцов. К сожалению, я заблудился о том, как на самом деле использовать результаты в качестве имен столбцов в операторе SELECT. Я подозреваю, что переменные MySQL будут полезны, но я не могу понять это.

Чтобы прояснить проблему, скажем, у меня есть таблица типа:

+---------------------------------------------------+
| countpivotarg                                     |
+---------------------------------------------------+
| ,SUM(IF(domain = "test.com",1,0)) AS `test.com`   |
| ,SUM(IF(domain = "test2.com",1,0)) AS `test2.com` |
+---------------------------------------------------+

Я хочу создать оператор выбора, который выглядит следующим образом:

SELECT id,
       meta_id,
       SUM(IF(domain = "test.com",1,0)) AS `test.com`,
       SUM(IF(domain = "test2.com",1,0)) AS `test2.com`
FROM   myTable;

Как мне это сделать?

Ответы [ 2 ]

3 голосов
/ 03 декабря 2011

В SQL имена столбцов должны быть зафиксированы во время подготовки запроса - без исключений.Разработка динамического сводного запроса, когда вы не знаете столбцы, требует написания кода приложения в любом случае.У вас есть выбор между использованием подхода предварительной обработки или подхода последующей обработки:

  • Предварительная обработка: Напишите запрос для извлечения списка различных значений.Затем используйте их в качестве имен столбцов и сгенерируйте новый динамический SQL-запрос.

  • Постобработка: Напишите запрос для извлечения данных в виде непивращаемого результата, изатем извлеките все данные и переведите их в другой формат.

3 голосов
/ 03 декабря 2011

Вы можете использовать Подготовленные MySQL Server операторы для построения динамических запросов из строковых переменных.

Пример:

SELECT domain INTO @colname FROM myTable LIMIT 1;
SET @s = CONCAT('SELECT `',@colname,'` FROM myTable');
PREPARE stmt FROM @s;
EXECUTE stmt;

Примечание: в именах столбцов в случае регистра требуются обратные символысодержать пробелы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...