メッセージのテーブルから特定の会話で最新のNメッセージを取得するためのクエリを試行しています。メッセージの量が制限を超えて行く一度sqlite.swiftサブクエリを行う方法
static let table = Table("messages")
let query = (table.filter(convoId == to).order(timestamp.desc).limit(10)).select(table[*]).order(timestamp.asc)
機能していない:私はsqlite.swiftでこれを試みた
select * from
(select * from messages where convoId = to order by timestamp DESC limit 10)
order by timestamp ASC;
:私はこれが正しいSQLだと思います。 sqlite.swiftクエリによって生成されるSQLが何であるかを確認する方法はありますか?助言がありますか?
EDIT:生のSQLクエリも試みましたが、結果を抽出する方法がわかりません。これは最後の手段であるべきような気がします:
let toQuoted = "'" + to + "'"
let subQueryStr: String = [
"(SELECT * FROM",
MessageDataHelper.TABLE_NAME,
"WHERE",
MessageDataHelper.CONVO_ID, "=", toQuoted, "ORDER BY", MessageDataHelper.TIMESTAMP, "DESC LIMIT", String(5), ")"
].joined(separator: " ")
let queryStr: String = [
"SELECT * FROM",
subQueryStr,
["ORDER BY", MessageDataHelper.TIMESTAMP, "ASC;"].joined(separator: " ")
].joined(separator: "\n")
let stmt = try db.prepare(queryStr)
for row in stmt {
// ? how can this be used to create model structure
for (index, name) in stmt.columnNames.enumerate() {
print ("\(name)=\(row[index]!)")
}
}
行[インデックス】結合型であるので、私はそこに値を取得する方法がわかりませんよ。助けてください!
おかげ
、いつでもご利用SQLビルダーや生のSQLクエリ、チェックしてください[ GRDB](http://github.com/groue/GRDB.swift)。 –