2017-09-12 2 views
0

내 응용 프로그램 안드로이드에 cordova SQLite storage plugin을 사용하고 있습니다. 보기에 표시 할 테이블이 두 개 필요합니다. 내 테이블은 "게시물"과 "메타"입니다. ...SQLite - 새로운 itens 결과를 추가하십시오

그래서 '제품'(게시물 테이블)을 게시 할 수 있으며 가격 및 색상 정보는 메타에서 저장됩니다. 표. 문제는 제품에서 메타 메타을 표시해야 할 때 목록이 필요하고 표 메타에서 정보를 얻은 후에 첫 번째 쿼리의 주요 결과에 메타를 추가해야합니다.

사실

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 

같은 다른 항목을 추가하고자하지만,이 작업을 수행하는 방법을 모르는, 당신이 나를 도울 수 있습니까?

이 제 기능입니다

... 기본 테이블에 대한 쿼리에 특정 메타 키를 추가하려면

posts 
ID 
title 
date 
type 


metas 
id 
meta_key 
meta_value 
+0

데이터베이스 스키마를 표시하십시오. 왜 당신은 별도의 메타 테이블을 사용하고 있습니까? –

+0

@ CL.I 질문 만 업데이트하면 이제 데이터베이스 스키마를 볼 수 있습니다. 저는 무제한의 'meta_keys'사용자가 자유롭게 만들 수 있기 때문에 별도로 사용하고 있습니다. –

답변

1

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

데이터베이스 스키마, 당신은 값을 조회 할 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

저에게 맞습니다. 감사. –