因此,我正在为我的应用程序制作一个内部混乱系统。我需要选择用户是发送者或接收者的所有消息。
GQL不支持"OR“查询,所以我需要运行两个查询,组合它们(结果),然后执行ORDER BY created DESC。
不幸的是,我找不到任何文档或示例如何在Python中做到这一点。
附言:我的猜测是db.GqlQuery("SELECT * FROM Messages WHERE sender_id = :1 ORDER BY created DESC UNION SELECT * FROM Messages WHERE receiver_id = :1 ORDER BY created DESC", user_id)
PPS。:我使用Python的变通方法。
def get_messages(user_id):
sender_query = db.GqlQuery("SELECT * FROM Messages WHERE sender_id = :1 ORDER BY created DESC", user_id)
receiver_query = db.GqlQuery("SELECT * FROM Messages WHERE receiver_id = :1 ORDER BY created DESC", user_id)
message_query = []
for q in sender_query:
message_query.append(q)
for q in receiver_query:
if q not in message_query: #doesn't work if user sent a message to himself (different instaces of same entity)
message_query.append(q)
message_query.sort(key=operator.attrgetter('created'))
return message_query仍在寻找GQL代数形式的解决方案
发布于 2013-08-02 09:56:59
看起来是个不错的解决方案。App Engine DB有它的局限性,它给你留下了很多工作。我注意到您正在使用DB;您是否考虑过迁移到NDB?它是下一代DB:https://developers.google.com/appengine/docs/python/ndb/。
NDB解决了DB的许多缺点。首先,它支持"OR“查询,甚至支持and和OR:https://developers.google.com/appengine/docs/python/ndb/queries#nest_and_or的嵌套组合
如果您发现自己正在花费大量时间编写代码,只是为了在DB上执行基本查询,那么迁移可能是一项不错的投资。
https://stackoverflow.com/questions/17795700
复制相似问题