Je tente une requête pour obtenir les derniers messages N dans une conversation particulière à partir d'une table de messages. Je pense que c'est le sql correct:sqlite.swift comment faire la sous-requête
select * from
(select * from messages where convoId = to order by timestamp DESC limit 10)
order by timestamp ASC;
J'ai essayé cela en sqlite.swift:
static let table = Table("messages")
let query = (table.filter(convoId == to).order(timestamp.desc).limit(10)).select(table[*]).order(timestamp.asc)
qui ne fonctionne pas une fois que la quantité de messages passe devant la limite. Est-il possible de voir ce que sql est produit par la requête sqlite.swift? Aucune suggestion?
EDIT: J'ai également essayé la requête SQL brute mais maintenant je ne sais pas comment extraire le résultat. Je me sens comme cela devrait être un dernier recours:
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]!)")
}
}
ligne [index] est de type Binding, donc je ne suis pas sûr comment récupérer la valeur là-bas. Aidez-moi, s'il vous plaît!
Merci
Si jamais vous rêvez d'une bibliothèque Swift SQLite qui fournit la consommation de ligne identique, chaque fois que votre utilisation du générateur SQL ou des requêtes SQL premières, consultez [ GRDB] (http://github.com/groue/GRDB.swift). –