所以我正在为我的应用程序制作一个内部消息系统。我需要选择用户是发送者或接收者的所有消息。
GQL 不支持“OR”查询,因此我需要运行两个查询,将它们(结果)组合起来,然后ORDER BY created DESC
.
不幸的是,我找不到任何文档或示例如何在 Python 中做到这一点。
PS.:我的猜测是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-algebra-ish 解决方案