2012-08-14 2 views
5

Desidero unire due tabelle in db indicizzato in HTML5. Ho trovato campioni di lotto da aggiungere, aggiornare, eliminare e elencare il record ma non ho trovato alcun campione per unire più tabelle. URLCome utilizzare i join in Db indicizzato HTML5?

  • Esempio: * http://users.telenet.be/kristofdegrave/ *

risposta

1

Per quanto ne so, IndexedDB non ha un'API per fare join, ancora. Le soluzioni che ho adottato consistevano nell'aprire un cursore, scorrere tra i risultati e fare il join manualmente. È il terribile approccio RBAR, ma non sono riuscito a trovare una soluzione migliore.

1

IndexedDB è in effetti un archivio di oggetti e normalmente in un archivio di oggetti c'è meno bisogno di join perché è sufficiente salvare la struttura nidificata.

Nel caso in cui si mostri, i dati di un codetable vengono uniti con dati reali. Il caso per risolvere questo problema senza un join è semplicemente recuperare la tabella di codici in memoria (normalmente questi dati non cambiano mai) e rendere il join in codice.

+0

+1, Ehi Kristof grazie per l'input, puoi mostrare qualche codice o URL. –

2

Non esiste un join, ma è possibile aprire più archivi di oggetti e collegarsi durante le iterazioni del cursore.

Usando il mio ydn-db biblioteca, è possibile interrogare SELECT * FROM Supplier, Part WHERE Supplier.CITY = Part.CITY da

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

vedere più in dettaglio su Join query article.

5

Stavo ponendo la stessa domanda quando si guardano solo a queste tecnologie. non controllare il vostro esempio particolare, ma ecco un esempio di Mozilla su come fare un join se ne avete bisogno:

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

E 'un bel po' di codice rispetto a SQL, ma penso che l'idea è che astrarre questi usando JavaScript in seguito è abbastanza facile.

+0

Molto è cambiato da questo. Qualche aggiornamento su come farlo nel 2016? – Rexford

1

Anziché provare a partecipare, riprogettare la modalità di archiviazione dei dati in modo che non sia necessario un join. Non è necessario seguire gli stessi vincoli di normalizzazione di SQL quando si utilizza un approccio no-sql. No-sql supporta la memorizzazione dei dati in modo ridondante quando è appropriato.