gpt4 book ai didi

android - GreenDao 深度查询 n :m relationships

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:16:36 25 4
gpt4 key购买 nike

我在我的应用程序中有一个设计如下的关系: relationship description我正在尝试选择至少有一个用户作为 friend 的所有聊天。

基本上,我想执行这个查询:

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

我还没有找到在 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());
}
}

最佳答案

由于 grrendao 目前没有实现 QueryBuilder.join() 方法,我认为您的解决方案是您现在可以获得的最佳解决方案之一,因为它在内部使用连接。

它只有一些小缺点:

  • 您可能会查询比实际需要更多的表
  • 您必须遍历一个可能很大的列表
  • 你不能使用listLazy()

另一种方法是使用这样的查询(假定 IsFriend 是一个 int-column 并且 myType 适合 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);

或者(性能可能较低):

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);

然后您可以使用所需的list()-方法:

qc.list();
qc.listLazy();
...

关于android - GreenDao 深度查询 n :m relationships,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19763032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com