the*_*osh 6 android android-sqlite greendao
我在我的应用程序中有一个这样设计的关系:
我正在尝试选择至少有一个用户作为朋友的所有聊天.
基本上,我想执行此查询:
SELECT c.* FROM CHAT c, USER u, UserChats uc
WHERE c.type = myType
AND u.isFriend = 1
AND c.id = uc.chatId
AND u.id = uc.userId
Run Code Online (Sandbox Code Playgroud)
我还没有找到办法在GreenDao图书馆中执行此操作,并希望有人能够帮助我.
编辑:
这是我现在所拥有的:
List<UsersChats> list = usersChatsDao.queryDeep(
"WHERE T0." + UserDao.Properties.isFriend.collumnName + " = ? "+
"AND T1." + ChatDao.Properties.type.collumName + " = ?",
new String[] {"1", myType});
if(list != null && list.isEmpty() == false) {
List<Chat> chats = new ArrayList<Chat>();
for(UsersChats link : list) {
chats.add(link.getChat());
}
}
Run Code Online (Sandbox Code Playgroud)
QueryBuilder.join()由于 grrendao目前没有实现-methods,我认为您的解决方案是您现在可以获得的最好的解决方案之一,因为它在内部使用了连接。
它只有一些小缺点:
listLazy()另一种方法是使用像这样的查询(假设IsFriend是int-columnandmyType适合ChatDao.Properties.type:
Query<Chat> qc = chatDao.queryRawCreate(
" LEFT JOIN "+UserChatsDao.TABLENAME+" UC"+
" ON T."+ChatDao.Properties.id.columnName+"=UC."+UserChats.Properties.chatId.columnName+
" LEFT JOIN "+UserDao.TABLENAME+" U"+
" ON UC."+UserChats.Properties.userId.columnName+"=U."UserDao.Properties.id.columnName+
" WHERE U."UserDao.Properties.isFriend.columnName+"=?"+
" AND T."+ChatDao.Properties.type.columnName+"=?", 1, myType);
Run Code Online (Sandbox Code Playgroud)
或者(可能性能较差):
Query<Chat> qc = chatDao.queryRawCreate(
" , "+UserChatsDao.TABLENAME+" UC"+
" , "+UserDao.TABLENAME+" U"+
" WHERE T."+ChatDao.Properties.type.columnName+"=?"+
" AND U."+UserDao.Properties.isFriend.columnName+"=?"+
" AND T."+ChatDao.Properties.id.columnName+"=UC."+UserChats.Properties.chatId.columnName+
" AND U."UserDao.Properties.id.columnName+"=UC."+UserChats.Properties.userId.columnName, myType, 1);
Run Code Online (Sandbox Code Playgroud)
然后您可以使用所需的list()方法:
qc.list();
qc.listLazy();
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3191 次 |
| 最近记录: |