我有两张表,其中包含两个不同游戏的游戏数据。为了简单起见,假设它们只共享一个名为的列Timestamp
(特别是它们具有不同数量的列)。我想呈现一个包含两个表中信息的列表,同时按Timestamp
.
我目前正在做的工作,但我几乎可以打赌有更好的方法来做到这一点。我最关心的是某个时候的性能(移动应用程序)。这是一个代表结构的存根——相信我,我知道这看起来有多可怕。我只是想先让它工作,现在我正在寻找改进。;)
var readyA,
readyB = false;
var dataA,
dataB;
function doLoop () {
setTimeout(renderData, 100);
}
function renderData () {
if (!readyA || !readyB) {
doLoop();
return;
}
var dataAll = dataA.concat(dataB);
dataAll.sort(function (a,b) {
return a['Timestamp'] <= b['Timestamp'];
});
// pass data into a template depending on from which game it is and render it
// ...
}
// wait for both queries to finish
doLoop();
// select data from game A
myDatabaseClass.query('SELECT ... FROM GameA', function (results) {
dataA = new Array(results.rows.length);
for (var i=0; i<results.rows.length; i++) {
dataA[i] = results.rows.item(i);
}
readyA = true;
});
// select data from game B
myDatabaseClass.query('SELECT ... FROM GameB', function (results) {
dataB = new Array(results.rows.length);
for (var i=0; i<results.rows.length; i++) {
dataB[i] = results.rows.item(i);
}
readyB = true;
});
现在的问题是我是否可以通过某种方式UNION
或JOIN
在查询中以某种方式简化这一点。显然,这个Timeout
结构很糟糕,但是如果查询可以在一个查询中完成(或至少一个事务——数据库类可以处理),它会自动折叠为一个简单的回调函数。
编辑:我确实找到了这个(从两个不同的表和订单中拉出),但这整个NULL AS some_column
感觉很脏。真的没有更好的选择吗?