GQL - 选择特定孩子不在儿童中的所有父母

时间:2012-01-13 20:18:55

标签: python google-app-engine gql datastore

我希望有一个父类(Group),任何数量的用户都可以加入。我想显示用户尚未进入的所有组。如何对此数据建模以及如何查询?很抱歉没有提供任何代码,但我根本不知道。

编辑: 在SQL中,这将通过User表,Group表和GroupUser交叉引用表来完成。并且查询将会:

select *
from Group
where Group.ID not in
(
 select GroupID
 from GroupUser
 where UserID = @userid
)

3 个答案:

答案 0 :(得分:0)

将会有成千上万的团体,用户将成为其中几十个成员?

您将遇到用户体验问题:如何让用户从数千个群组中进行选择?一张50页以上的分页表?

关于您的问题:当您解决上述问题时,您可以正确标记用户已经是其成员的群组:

你可以简单地在内存中拥有所有用户组(它只有十个ID,对吧?),只需在显示组时过滤它们。

答案 1 :(得分:0)

正如Wooble所说,没有办法为App Engine数据存储区构建这样的查询。如果您的组数量大大超过用户实际所在组的数量,那么您最好的选择就是选择所有组,然后过滤掉用户已经使用的组 - 这正是SQL数据库在查询时所做的事情

答案 2 :(得分:0)

也许我的问题不明确,我显然是GAE的新手,我的术语可能是错的。无论如何,这是我的解决方案:

class User(db.Model):
  username = db.StringProperty()

class Group(db.Model):
  users = db.ListProperty(db.Key)

要查找群组并加入(稍微简化):

groups = db.GqlQuery("SELECT * "
                     "FROM Group")        

for g in groups:                
   if user.key() not in g.users:                    
      group = g
      break

group.users.append(user.key())
相关问题