2012-08-14 66 views
5

我確實想在HTML5索引數據庫中連接兩個表。 我發現很多樣品要添加,更新,刪除和列表記錄,但找不到任何樣品加入多個表。如何在HTML5中使用連接索引的Db?

  • 樣品網址: * http://users.telenet.be/kristofdegrave/ *

回答

1

據我所知,是IndexedDB沒有做加入一個API,然而。我採用的解決方案包括打開遊標,循環搜索結果和手動執行加入。這是可怕的RBAR方法,但我找不到更好的解決方案。

1

IndexedDB實際上是一個對象存儲,並且在對象存儲中非常普通,因此只需保存嵌套結構就不需要連接。

在你展示的情況下,來自代碼表的數據會與真實數據相結合。沒有連接的情況下解決這個問題只是將你的代碼表取到內存中(通常這些數據永遠不會改變),並在代碼中進行連接。

+0

+1,嘿克里斯托夫感謝您的輸入,你可以顯示一些代碼或網址。 – 2012-08-28 17:11:06

2

沒有連接,但可以在遊標迭代過程中打開多個對象存儲並進行連接。

用自己ydn-db庫,可以通過

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詳細查詢SELECT * FROM Supplier, Part WHERE Supplier.CITY = Part.CITY

5

在總體看待這些技術時,想知道同樣的問題。沒有檢查你的具體的例子,但這裏是從Mozilla的關於如何做一個連接,如果你需要它的一個例子:

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

這是一個相當大量的代碼相比,SQL,但是我認爲這個想法以後使用JavaScript進行抽象是很容易的。

+0

自此以後,發生了很多變化。有關2016年如何做的更新? – Rexford 2016-04-01 19:04:43

1

而不是嘗試加入,重新設計您如何存儲數據,以便不需要連接。當您使用no-sql方法時,不需要遵循與SQL相同的規範化約束。 No-sql支持在適當的時候冗餘地存儲數據。