Выберите данные всех столбцов в строке как одну строку в таблицах [duplicate]

Посмотрите на этот пример:

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope,$http) {

    var getJoke = function(){
        return $http.get('http://api.icndb.com/jokes/random').then(function(res){
            return res.data.value;  
        });
    }

    getJoke().then(function(res) {
        console.log(res.joke);
    });
});

Как вы можете видеть, getJoke возвращает разрешенное обещание (оно разрешено при возврате res.data.value). Таким образом, вы ждете, пока запрос $ http.get не будет завершен, а затем выполнится console.log (res.joke) (как обычный асинхронный поток).

Это plnkr:

http://embed.plnkr.co/XlNR7HpCaIhJxskMJfSg/

12
задан Blub 28 April 2014 в 19:06
поделиться

1 ответ

Чтобы объединить все столбцы в таблице, вы не можете использовать ключевое слово *, но вам нужно явно указать все столбцы:

SELECT CONCAT(col1, col2, col3, ....)
FROM yourtable

или вы можете использовать CONCAT_WS который будет пропускать нулевые значения:

SELECT CONCAT_WS(',', col1, col2, col3, ....)
FROM yourtable

Если вы не хотите указывать все имена столбцов вручную, вы можете использовать динамический запрос. Этот запрос вернет все имена столбцов вашей таблицы:

SELECT `column_name` 
FROM   `information_schema`.`columns` 
WHERE  `table_schema`=DATABASE() 
       AND `table_name`='yourtable';

и с помощью GROUP_CONCAT вы можете получить список всех имен столбцов:

GROUP_CONCAT(CONCAT('`', column_name, '`'))

, процитированных в запятой format:

`col1`,`col2`,`col3`,`col4`,...

, поэтому теперь у нас есть все элементы для создания нашего запроса динамически:

SELECT
  CONCAT(
    'SELECT CONCAT_WS(\'\',',
    GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name),
    ') AS all_columns FROM yourtable;')
FROM   `information_schema`.`columns` 
WHERE  `table_schema`=DATABASE() 
       AND `table_name`='yourtable'
INTO @sql;

этот запрос установит строку @sql на что-то вроде:

SELECT CONCAT_WS('', col1, col2, col3, ....) AS all_columns FROM yourtable

, и этот код выполнит его:

PREPARE stmt FROM @sql;
EXECUTE stmt;

См. здесь скрипт .

21
ответ дан fthiella 1 September 2018 в 09:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: