2017-09-12 7 views
0

私はアプリケーションのAndroidにcordova SQLite storage pluginを使用しています。私は2つのテーブルの結果をビューに表示する必要があります。私のテーブルは "投稿"と "メタ"です...SQLite - 新しいitensを結果に追加

私は 'products'(ポストテーブル)を公開でき、価格や色などの情報はメタで保存されます表。問題は、製品からメタデータを表示する必要があるとき、リストが必要で、テーブルメタから情報を取得した後ですが、最初のクエリからメタデータを追加する必要があります。

が実際に

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

を返され、私はこの

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 

のような他の項目を追加したい。しかし、これを行う方法を知って、あなたは私を助けることができないのですか?メインテーブル上のクエリに特定のメタキーを追加するには

この私の機能である...

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

データベーススキーマ

posts 
ID 
title 
date 
type 


metas 
id 
meta_key 
meta_value 
+0

データベーススキーマを表示します。なぜあなたは別のメタテーブルを使用していますか? –

+0

@ CL.質問を更新するだけで、データベーススキーマを確認できるようになりました。私は無制限の 'meta_keys'ユーザーが自由に作成できるので、別に使用しています。 –

答えて

1

、あなたは値をルックアップするためにcorrelated subqueriesを使用することができます。

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

私にはうってつけです。ありがとう。 –

関連する問題