2012-08-14 37 views

Trả lời

1

Theo như tôi biết, IndexedDB không có API để thực hiện tham gia, chưa. Các giải pháp tôi đã áp dụng liên quan đến việc mở một con trỏ, lặp qua các kết quả và thực hiện việc nối thủ công. Đó là phương pháp RBAR đáng sợ, nhưng tôi không thể tìm ra giải pháp tốt hơn.

1

Chỉ mụcDB thực tế là một kho lưu trữ đối tượng và bình thường trong một kho đối tượng có ít nhu cầu tham gia hơn vì bạn chỉ có thể lưu cấu trúc lồng nhau.

Trong trường hợp bạn hiển thị, dữ liệu từ một mã có thể được kết hợp với dữ liệu thực. Các trường hợp để giải quyết điều này mà không có một tham gia chỉ là lấy bảng mã của bạn vào bộ nhớ (thông thường dữ liệu này không bao giờ thay đổi) và làm cho tham gia trong mã.

+0

+1, Hey Kristof cảm ơn đầu vào, bạn có thể hiển thị một số mã hoặc url không. –

2

Không có tham gia, nhưng bạn có thể mở nhiều cửa hàng đối tượng và tham gia trong quá trình lặp con trỏ.

Sử dụng ydn-db thư viện của riêng tôi, bạn có thể truy vấn SELECT * FROM Supplier, Part WHERE Supplier.CITY = Part.CITY bởi

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]); 

Xem chi tiết hơn về Join query article.

5

Đã tự hỏi cùng một câu hỏi khi chỉ nhìn chung các công nghệ này. Không kiểm tra ví dụ cụ thể của bạn, nhưng đây là một ví dụ từ Mozilla về cách làm một tham gia nếu bạn cần nó:

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

Nó được khá nhiều mã so với SQL, nhưng tôi nghĩ rằng ý tưởng là tóm tắt những điều này bằng cách sử dụng JavaScript sau này là khá dễ dàng.

+0

Rất nhiều đã thay đổi kể từ này. Mọi cập nhật về cách thực hiện trong năm 2016? – Rexford

1

Thay vì cố gắng tham gia, hãy thiết kế lại cách bạn lưu trữ dữ liệu để không cần tham gia. Bạn không cần phải tuân thủ các ràng buộc chuẩn hóa giống như SQL khi bạn đang sử dụng một phương pháp không có sql. No-sql hỗ trợ lưu trữ dữ liệu dư thừa khi thích hợp.

Các vấn đề liên quan