2017-09-12 4 views
0

J'utilise cordova SQLite storage plugin dans mon application Android. J'ai besoin d'obtenir le résultat de 2 tables à afficher, mes tables sont des "poteaux" et "metas" ...SQLite - ajouter de nouvelles façons de résultat

Donc je peux publier des 'produits' (table de poteaux) et des informations comme le prix et la couleur sont économisés en metas table. Le problème est quand j'ai besoin de montrer des métas des produits, j'ai besoin de la liste et après obtenir l'information des métas de table, mais j'ai besoin d'ajouter des métas dans le résultat principal (de la première requête).

est en fait retourné

results.rows.item(i).id 
    results.rows.item(i).title 
    results.rows.item(i).date 

et je veux ajouter d'autres articles comme celui-ci

results.rows.item(i).id 
    results.rows.item(i).title 
    results.rows.item(i).date 
    results.rows.item(i).price 
    results.rows.item(i).color 

Mais ne sais pas comment faire, pouvez-vous me aider?

Voici mes fonctions ...

function query(sql, callback){ 

    db.transaction(function(transaction) { 

     var executeQuery = sql; 
     transaction.executeSql(executeQuery, [ ], 
     function(tx, result) { 
      //Success 

      if(typeof(callback) == 'function'){ 
       callback(result); 
      } 
     }, 
     function(error){ 
      // Error 
     }); 
    } 
} 


function get_meta(data, strMetaKey, callback){ 

    for(i=0; i < data.length; i++){ 

     // QUERY 
     query(/* SQL WHERE id = i.id AND meta_key = strMetaKey*/, function(result){ 


      // here is my problem, I can't add 'price' to data 
      data.rows.item(i).price = result.rows.item(0).meta_value; 
     }); 

    } 

    if(typeof(callback) == 'function'){ 
     callback(data); 
    } 
} 



new_data = ''; 


// getting products 
query(/* my query */, function(result){ 


    // getting price 
    get_meta(result, 'price', function(result){ 
     new_data = result; 
    }); 

    // getting color 
    get_meta(result, 'color', function(result){ 
     new_data = result; 
    }); 
}); 

schéma de base de données

posts 
ID 
title 
date 
type 


metas 
id 
meta_key 
meta_value 
+0

Afficher le schéma de base de données. Pourquoi utilisez-vous une table de méta séparée? –

+0

@ CL.Je viens de mettre à jour la question, maintenant vous pouvez voir le schéma de base de données. J'utilise distinct parce que nous pouvons avoir illimité 'meta_keys' les utilisateurs sont libres de créer. –

Répondre

1

Pour ajouter des clés méta spécifiques à une requête sur la table principale, vous pouvez utiliser correlated subqueries pour regarder les valeurs jusqu'à:

SELECT ID, 
     title, 
     date, 
     (SELECT meta_value 
     FROM metas 
     WHERE id  = posts.id 
      AND meta_key = 'price' 
     ) AS price, 
     (SELECT meta_value 
     FROM metas 
     WHERE id  = posts.id 
      AND meta_key = 'color' 
     ) AS color 
FROM posts; 
+0

Fonctionne pour moi. Merci. –