SQLite - 向结果

时间:2017-09-12 15:58:27

标签: android sqlite cordova phonegap cordova-sqlite-storage

我在Android应用程序中使用cordova SQLite storage plugin。我需要从2个表中获取结果才能在视图中显示,我的表格是“posts”和“metas”......

所以我可以发布'产品'(帖子表),价格和颜色等信息保存在元数据表中。问题是当我需要从产品中显示metas时,我需要列表并在从表metas获取信息后,但我需要在主要结果中添加metas(来自第一个查询)。

实际上已退回

    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

1 个答案:

答案 0 :(得分: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;