我希望有一个父类(Group),任何数量的用户都可以加入。我想显示用户尚未进入的所有组。如何对此数据建模以及如何查询?很抱歉没有提供任何代码,但我根本不知道。
编辑: 在SQL中,这将通过User表,Group表和GroupUser交叉引用表来完成。并且查询将会:
select *
from Group
where Group.ID not in
(
select GroupID
from GroupUser
where UserID = @userid
)
答案 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())