【发布时间】:2012-11-18 17:05:35
【问题描述】:
我有两张表,其中包含两个不同游戏的游戏数据。为了简单起见,假设他们只共享一个名为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 结构很糟糕,但如果查询可以在一个查询中完成(或至少一个事务——数据库类可以处理),它会自动折叠为一个简单的回调函数。
编辑:我确实找到了这个 (Pull from two different tables and order),但整个 NULL AS some_column 感觉很脏。真的没有更好的选择吗?
【问题讨论】:
-
@Fahim Parkar:这有点离题,但是“提前致谢”有什么问题?
-
哦,好吧。那么——我想保持礼貌,但如果它被认为是杂乱无章的,我会把它排除在外。谢谢!
标签: javascript mysql sqlite