如何组合这两个SQLite查询?

时间:2015-12-30 19:50:01

标签: android sqlite

如何使用LIMIT关键字将这两个查询合并到一个查询中以获取最近10条消息?

Cursor cursor0 = db.query(Chat_MESSAGE, messagecolumns, senderid + "=? AND " + receiverid + "=?", new String[] {
            sender_id, receiver_id }, null, null, null, null);

Cursor cursor1 = db.query(Chat_MESSAGE, messagecolumns, senderid + "=? AND " + receiverid + "=?", new String[] {
            receiver_id, sender_id }, null, null, null, null);

表是

chat id sender_id receiver_id message
   1        1       2            hii
   2        1       2            hello
   3        2       1            good
   4        2       1            nice
   5        1       5            hii

我想获得1-4条记录。

2 个答案:

答案 0 :(得分:2)

这是您最初的两个条件:

senderid = ? AND receiverid = ?
receiverid = ? AND senderid = ?

要合并它们,请使用OR:

(senderid = ? AND receiverid = ?) OR
(receiverid = ? AND senderid = ?)

这需要四个参数值。使用带编号的参数,您可以重复使用它们:

(senderid = ?1 AND receiverid = ?2) OR
(receiverid = ?1 AND senderid = ?2)

答案 1 :(得分:0)

执行LIMIT(或GROUP_BY)的技巧是将其添加到SORT子句的末尾。例如,假设您的id列名为senderId,则可以使用SORT子句"senderid DESC LIMIT 10"

现在我不确定db是什么(可能是数据库直接),但你应该使用内容提供商,所以params是' uri,projection,selection,arguments,sort'以下应该是你想要的

cursor = cp.query(Chat_MESSAGE, messagecolumns, "senderid=? AND " + "receiverid=?", new String[] { sender_id, receiver_id }, "senderid DESC LIMIT 10");

如果出现此问题是因为您不知道如何阅读光标jsut添加评论,我会告诉您