Следующая ссылка имеет хорошее объяснение:
Как сохранить запрос MySql с заголовками
Но чтобы вам не приходилось посещать сайт, они приводят следующий пример:
Чтобы включить имена столбцов (чтобы файл .CSV содержал заголовки в первой строке), вы можете жестко закодировать их в другом операторе SELECT, добавляемом к остальной части запроса оператором UNION ALL.
/* Add column headers */
SELECT 'OrderId','CustomerID','EmployeeID','OrderDate','RequiredDate','ShippedDate','ShipVia','Freight','ShipName','ShipAddress','ShipCity','ShipRegion','ShipPostalCode','ShipCountry','OrderID','ProductId','UnitPrice','Quantity','Discount'
UNION ALL
/* Now the actual query */
SELECT o.OrderId, o.CustomerID, o.EmployeeID, o.OrderDate, o.RequiredDate, o.ShippedDate, o.ShipVia, o.Freight, o.ShipName, o.ShipAddress, o.ShipCity, o.ShipRegion, o.ShipPostalCode, o.ShipCountry, od.OrderID, od.ProductId, od.UnitPrice, od.Quantity, od.Discount
FROM `Orders` o LEFT JOIN `Order Details` od ON od.OrderID = o.OrderID
/* Save the query results to a file */
INTO OUTFILE '/tmp/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
Как правило, выбирайте заголовки отдельно и используйте UNION ALL. Просто добавьте Order by в раздел запроса, где вы на самом деле получаете свои данные.
Пример
Так что этот пример работает для меня. Причина, по которой вы получили заголовки внизу, была в том, что вы применяли предложение ORDER BY ко всему UNION. Вам нужно обернуть вторую часть UNION в скобки, чтобы применить ORDER BY только ко всем внутри скобок.
Это работает для меня:
SELECT 'ID', 'Name', 'Description'
UNION ALL
(SELECT id, name, description
FROM test.questions
ORDER BY name Asc
LIMIT 9999);
Немного больше информации с сайта MYSQL:
Однако использование ORDER BY для отдельных операторов SELECT ничего не подразумевает в порядке, в котором строки появляются в конечном результате, поскольку UNION по умолчанию создает неупорядоченный набор строк. Следовательно, использование ORDER BY в этом контексте обычно связано с LIMIT, так что он используется для определения подмножества выбранных строк для извлечения для SELECT, даже если это не обязательно влияет на порядок этих строк в окончательный результат UNION. Если ORDER BY появляется без LIMIT в SELECT, он оптимизируется, потому что он все равно не будет иметь никакого эффекта.
В принципе, вы ДОЛЖНЫ также применять ОГРАНИЧЕНИЕ при применении ORDER BY, иначе это не повлияет.