我想在HTML5 IndexedDB 中加入两个表。我发现了很多样本添加,更新,删除和列表记录,但找不到任何样本加入多个表。
***示例URL:**users.telenet.be/kristofdegrave/
uujelgoq1#
我想知道同样的问题,当只是一般地看这些技术。没有检查你的特定例子,但这里是一个例子,从Mozilla如何做一个连接,如果你需要它:https://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/与SQL相比,这是相当多的代码,但我认为其思想是稍后使用JavaScript抽象这些代码是相当容易的。
hlswsv352#
没有联接,但可以在游标迭代期间打开多个对象存储并进行联接。使用我自己的ydn-db库,可以通过以下方式查询SELECT * FROM Supplier, Part WHERE Supplier.CITY = Part.CITY
SELECT * FROM Supplier, Part WHERE Supplier.CITY = Part.CITY
var iter_supplier = new ydn.db.IndexValueIterator('Supplier', 'CITY'); var iter_part = new ydn.db.IndexValueIterator('Part', 'CITY'); var req = db.scan(function(keys, values) { var SID = keys[0]; var PID = keys[1]; console.log(SID, PID); if (!SID || !PID) { return []; // done } var cmp = ydn.db.cmp(SID, PID); // compare keys if (cmp == 0) { console.log(values[0], values[1]); return [true, true]; // advance both } else if (cmp == 1) { return [undefined, SID]; // jump PID cursor to match SID } else { return [PID, undefined]; // jump SID cursor to match PID } }, [iter_supplier, iter_part]);
更多详情请参见Join query article。
kupeojn63#
据我所知,IndexedDB还没有一个执行JOIN的API。我采用的解决方案包括打开一个游标,遍历结果,手动执行join。这是一个可怕的RBAR方法,但我找不到更好的解决方案。
xienkqul4#
不要尝试联接,而是重新设计存储数据的方式,这样就不需要联接。使用no-sql方法时,不需要遵循与SQL相同的规范化约束。No-sql支持在适当的时候冗余地存储数据。
tvz2xvvm5#
IndexedDB实际上是一个对象存储,通常在对象存储中不太需要连接,因为您可以只保存嵌套结构。在你所展示的例子中,代码表中的数据与真实的数据连接,不使用连接的情况下,只需将代码表提取到内存中(通常这些数据不会改变),然后在代码中进行连接。
5条答案
按热度按时间uujelgoq1#
我想知道同样的问题,当只是一般地看这些技术。没有检查你的特定例子,但这里是一个例子,从Mozilla如何做一个连接,如果你需要它:
https://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/
与SQL相比,这是相当多的代码,但我认为其思想是稍后使用JavaScript抽象这些代码是相当容易的。
hlswsv352#
没有联接,但可以在游标迭代期间打开多个对象存储并进行联接。
使用我自己的ydn-db库,可以通过以下方式查询
SELECT * FROM Supplier, Part WHERE Supplier.CITY = Part.CITY
更多详情请参见Join query article。
kupeojn63#
据我所知,IndexedDB还没有一个执行JOIN的API。我采用的解决方案包括打开一个游标,遍历结果,手动执行join。这是一个可怕的RBAR方法,但我找不到更好的解决方案。
xienkqul4#
不要尝试联接,而是重新设计存储数据的方式,这样就不需要联接。使用no-sql方法时,不需要遵循与SQL相同的规范化约束。No-sql支持在适当的时候冗余地存储数据。
tvz2xvvm5#
IndexedDB实际上是一个对象存储,通常在对象存储中不太需要连接,因为您可以只保存嵌套结构。
在你所展示的例子中,代码表中的数据与真实的数据连接,不使用连接的情况下,只需将代码表提取到内存中(通常这些数据不会改变),然后在代码中进行连接。