9

我确实想在 HTML5 索引数据库中加入两个表。我找到了很多要添加、更新、删除和列出记录的样本,但找不到任何要加入多个表的样本。

  • 示例网址: * http://users.telenet.be/kristofdegrave/ *
4

5 回答 5

6

只是在一般地查看这些技术时想知道同样的问题。没有检查您的特定示例,但这里有一个来自 Mozilla 的示例,说明您需要时如何进行加入:

https://hacks.mozilla.org/2010/06/comparing-indexeddb-and-webdatabase/

与 SQL 相比,这是相当多的代码,但我认为这个想法是稍后使用 JavaScript 抽象这些代码非常容易。

于 2012-10-13T08:28:15.850 回答
3

没有连接,但您可以在游标迭代期间打开多个对象存储并连接。

使用我自己的ydn-db库,您可以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]);

请参阅加入查询文章的更多详细信息。

于 2012-09-03T16:53:51.863 回答
2

与其尝试加入,不如重新设计存储数据的方式,以便不需要加入。当您使用 no-sql 方法时,您不需要遵循与 SQL 相同的规范化约束。No-sql 支持在适当的时候冗余存储数据。

于 2013-05-27T16:09:20.380 回答
1

据我所知,IndexedDB 还没有用于执行 JOIN 的 API。我采用的解决方案包括打开游标、遍历结果并手动进行连接。这是可怕的 RBAR 方法,但我找不到更好的解决方案。

于 2012-08-14T10:12:30.790 回答
1

IndexedDB 实际上是一个对象存储,并且在对象存储中通常不需要连接,因为您可以只保存嵌套结构。

在您展示的情况下,来自代码表的数据与真实数据相结合。在没有连接的情况下解决这个问题的情况是将您的代码表提取到内存中(通常这些数据永远不会改变)并在代码中进行连接。

于 2012-08-14T12:25:43.370 回答