[英]Select and organize same columns from different tables
I have a MySQL database with multiple tables and those tables contain multiple columns that are equal, and I want to push that data into a google spreadsheet. 我有一个包含多个表的MySQL数据库,这些表包含多个相同的列,我想将这些数据推送到谷歌电子表格中。
For example: 例如:
table1
contains id
, name
, page
, and a couple of columns specific for that table. table1
包含id
, name
, page
以及特定于该表的几列。
table2
contains id
, name
, page
, and a couple of different columns table2
包含id
, name
, page
和几个不同的列
table3
also has id
, name
, page
, and more unique columns, etc. table3
还有id
, name
, page
和更多唯一列等。
This is my code: 这是我的代码:
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);
}
}
Is it possible to select id, name and page from all three tables in one query and get the result in arrival order? 是否可以在一个查询中从所有三个表中选择id,name和page,并在到达顺序中获得结果? I entered the same id in each table one by one, I mean, 1
in table1
, 1
in table2
and 1
in table3
in that order, then I did the same with 2
and etc, this is how the output should look: 我输入了相同的ID每个表一个接一个,我的意思是, 1
在table1
, 1
在table2
和1
的table3
的顺序,那么我也同样用2
和等,这是输出应该是什么样子:
id
name
page
id
name
page
1
name1
toys
1
name1
toys
1
name2
food
1
name2
food
1
name3
electronics
1
name3
electronics
2
name4
toys
2
name4
toys
2
name5
food
2
name5
food
2
name6
electronics
2
name6
electronics
3
name7
toys
3
name7
toys
3
name8
food
3
name8
food
3
name9
electronics
3
name9
electronics
But in the output they get grouped by table, and that doesn't work me: 但是在输出中,它们按表格分组,这对我没有用处:
id
name
page
id
name
page
1
name1
toys
1
name1
toys
2
name4
toys
2
name4
toys
3
name7
toys
3
name7
toys
1
name2
food
1
name2
food
2
name5
food
2
name5
food
3
name8
food
3
name8
food
1
name3
electronics
1
name3
electronics
2
name6
electronics
2
name6
electronics
3
name9
electronics
3
name9
electronics
I would post a picture, but I do not have enough reputation. 我会张贴一张照片,但我的名声不够。
I need the output in arrival order, any suggestions? 我需要输出到货顺序,有什么建议吗?
您可以使用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';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.