从不同的表中选择并组织相同的列

时间:2019-05-21 14:44:22

标签: javascript mysql google-apps-script google-sheets

我有一个包含多个表的MySQL数据库,这些表包含多个相等的列,我想将该数据推送到google电子表格中。

例如:

table1包含idnamepage以及该表的几列。

table2包含idnamepage和几个不同的列

table3还具有idnamepage和更多唯一列,等等。

这是我的代码:

function readFromTable() {
  var ss = SpreadsheetApp.getActive();
  var sheetDetails = ss.getSheetByName('Details');
  var sheetData = ss.getSheetByName('Clients');

  var host = sheetDetails.getRange("B1").getValue();
  var databaseName = sheetDetails.getRange("B2").getValue();
  var userName = sheetDetails.getRange("B3").getValue();
  var password = sheetDetails.getRange("B4").getValue();
  var port = sheetDetails.getRange("B5").getValue();

  var url = 'jdbc:mysql://'+host+':'+port+'/'+databaseName;
  Logger.log(url);
  Logger.log(userName);
  Logger.log(password);
  var sql = 'SELECT id, name, page FROM table1 UNION SELECT id, name, page FROM table2 UNION SELECT id, name, page FROM table3';
try{
  var connection = Jdbc.getConnection(url, userName, password);

  var results = connection.createStatement().executeQuery(sql);
  var metaData = results.getMetaData();
  var columns = metaData.getColumnCount();

// Retrieve metaData to a 2D array
   var values = [];
   var value = [];
   var element = '';

// Get table headers
   for(i = 1; i <= columns; i ++){
   element = metaData.getColumnLabel(i);
   value.push(element);
}
   values.push(value);

// Get table data row by row
   while(results.next()){
   value = [];
   for(i = 1; i <= columns; i ++){
    element = results.getString(i);
    value.push(element);
  }
  values.push(value);
}

// Cloese connection
   results.close();

// Write data to sheet Data
SpreadsheetApp.flush();
sheetData.getRange(2, 1, values.length, value.length).setValues(values);
SpreadsheetApp.getActive().toast('The data has been updated.');
}catch(err){
SpreadsheetApp.getActive().toast(err.message);
} 
}

是否可以在一个查询中从所有三个表中选择ID,名称和页面,并按到达顺序获得结果?我在每个表中一个一个地输入了相同的ID,即1中的table11中的table21中的table3按照这个顺序,然后我对2等进行了相同的操作,这就是输出的样子:

id name page

1 name1 toys

1 name2 food

1 name3 electronics

2 name4 toys

2 name5 food

2 name6 electronics

3 name7 toys

3 name8 food

3 name9 electronics

但是在输出中,它们按表分组,这对我不起作用:

id name page

1 name1 toys

2 name4 toys

3 name7 toys

1 name2 food

2 name5 food

3 name8 food

1 name3 electronics

2 name6 electronics

3 name9 electronics

我会发布图片,但是我没有足够的声誉。

我需要按到达顺序的输出,有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您可以使用ORDER BY子句:

var sql = '(SELECT id, name, page FROM table1) UNION (SELECT id, name, page FROM table2) UNION (SELECT id, name, page FROM table3) ORDER BY id';