MYSQL命令获取列标题,位置和顺序

时间:2018-07-02 15:01:51

标签: mysql sql database csv plotly

所以我想从数据库表导出到.csv文件以使用,但是我的问题是正确设置所有跟随参数。

  
      
  1. 首先,我需要将所有列标题导出为csv文件中的第一列,
  2.   
  3. 然后从那里我需要使用(WHERE ...)和
  4. 导出所有需要的数据   
  5. 最后,我需要订购某个列(ORDER BY ...)。
  6.   

当前,我只能正确获得3个参数中的两个。 所以我目前的说法是:

SELECT * 
FROM ( " ... all my rows names" 
       UNION ALL 
       ( SELECT * 
         from table_name 
         where Set_Type = "..." or ID = "..." ORDER by probability 
       )
     ) as tbl INTO OUTFILE '   ' FIELDS TERMINATED by ',';

因此,当前,该命令将列移至第一行,并且WHERE Set_Type或ID部分正确。但是,它不会对概率部分进行排序。有什么方法可以在导出之前完成所有操作吗?最好是在一个命令中,但如果是多个命令,那么我每次执行的操作都需要一个特定的ID,因此该命令将有所不同。

1 个答案:

答案 0 :(得分:0)

以下链接有一个很好的解释:

How to save a MySql query with headers

但是为了您不必访问该网站,他们提供的示例是:

  

要包括列名(以便.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子句应用于整个UNION。您需要将UNION的第二部分包装在方括号中,以便仅将ORDER BY应用于方括号内的所有内容。

这对我有用:

SELECT 'ID', 'Name', 'Description'

UNION ALL 

(SELECT id, name, description

FROM test.questions

ORDER BY name Asc

LIMIT 9999);

更多来自MYSQL网站的信息:

  

但是,对单个SELECT语句使用ORDER BY并不意味着行在最终结果中的显示顺序,因为UNION默认情况下会产生一组无序的行。因此,在这种情况下,ORDER BY的使用通常与LIMIT结合使用,因此,它可以用于确定要为SELECT检索的所选行的子集,即使它不一定影响SELECT中的那些行的顺序。最终的UNION结果。如果ORDER BY在SELECT中没有LIMIT出现,则会对其进行优化,因为它还是无效。

基本上,您在应用ORDER BY时还必须应用一个LIMIT,否则它不会生效。