2016-03-19 13 views
0

私のデータベースには2つのSQLiteテーブルがあり、各テーブルにはCURRENT_TIMESTAMPから取得したDATETIME値を含むcreated_atという列があります。次のようにAndroid SQLite - 2つの結合テーブルでstrftimeを使用するにはどうすればいいですか?

テーブルは以下のとおりです。

db.execSQL("CREATE TABLE folders (_id INTEGER PRIMARY KEY, " + 
     "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " + 
     "parent INTEGER DEFAULT -1, " + 
     "hidden INTEGER DEFAULT 0, " + 
     "name TEXT);"); 

db.execSQL("CREATE TABLE folder_items (" + 
     "_id INTEGER PRIMARY KEY, " + 
     "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " + 
     "parent_id INTEGER, " + 
     "item_id INTEGER, " + 
     "item_type INTEGER, " + 
     "item_date TEXT" + 
     ");"); 

私はINNER JOINを使用して、両方のテーブルからデータを選択したいとLEFT JOINは。

これは、これまでの私のコードです:

public Cursor getFolderContents(long id, int item_type) { 

    SQLiteDatabase db = databaseHelper.getReadableDatabase(); 

    String args[]; 

    StringBuilder query = new StringBuilder("SELECT "); 
    query.append("pf._id AS pf_id, "); 
    query.append("(strftime('%s', pf_created_at) * 1000) AS pf_created_at, "); 
    query.append("pf.parent AS pf_parent, "); 
    query.append("pf.name AS pf_name, "); 
    query.append("f.name AS f_name, "); 
    query.append("fi._id AS fi_id, "); 
    query.append("(strftime('%s', fi_created_at) * 1000) AS fi_created_at, "); 
    query.append("fi.parent_id AS fi_parent_id, "); 
    query.append("fi.item_id AS fi_item_id, "); 
    query.append("fi.item_type AS fi_item_type, "); 
    query.append("fi.item_date AS fi_item_date "); 
    query.append("FROM folders pf "); 
    query.append("INNER JOIN folder_items fi ON (fi.parent_id = pf._id) "); 
    query.append("LEFT JOIN folders f ON (f._id = fi.item_id) "); 
    query.append("WHERE pf._id = ? "); 

    if (item_type >= 0) { 
     query.append("AND fi.item_type = ? "); 
     args= new String[]{String.valueOf(id), String.valueOf(item_type)}; 
    } else { 
     args= new String[]{String.valueOf(id)}; 
    } 
    query.append("ORDER BY fi.item_type ASC, LOWER(f.name) ASC, fi.item_date ASC"); 
    Log.e("getfolder", query.toString()); 
    return db.rawQuery(query.toString(), args); 
} 

SELECTを実行すると、次のエラーが発生します。

no such column: pf_created_at (code 1): , while compiling: 
SELECT pf._id AS pf_id, (strftime('%s', pf_created_at) * 1000) AS pf_created_at, 
pf.parent AS pf_parent, pf.name AS pf_name, f.name AS f_name, fi._id AS fi_id, 
(strftime('%s', fi_created_at) * 1000) AS fi_created_at, fi.parent_id AS 
fi_parent_id, fi.item_id AS fi_item_id, fi.item_type AS fi_item_type, 
fi.item_date AS fi_item_date FROM folders pf INNER JOIN folder_items fi ON 
(fi.parent_id = pf._id) LEFT JOIN folders f ON (f._id = fi.item_id) WHERE pf._id 
= ? ORDER BY fi.item_type ASC, LOWER(f.name) ASC, fi.item_date ASC 

私はこれがで発生すると仮定します。どうすればよい

query.append("(strftime('%s', pf_created_at) * 1000) AS pf_created_at, "); 

strftime関数を書いて2つの異なるテーブルから列を選ぶようにする

答えて

0

問題が見つかりました:

query.append("(strftime('%s', pf_created_at) * 1000) AS pf_created_at, "); 

は次のようになります。

query.append("(strftime('%s', pf.created_at) * 1000) AS pf_created_at, "); 

期間pf.created_atにアンダーませんが。

関連する問題