2010-01-16 108 views
1

我有一个包含名为'type'的字符串属性的productpart数据库。 我想要做的是按给定类型(有时多于一种类型)获取所有产品。GAE:将多个查询合并为一个

我试过使用GAE滤镜方法,但无法让它正常工作。

我工作的唯一解决方案是为每种类型创建一个新的db.GqlQuery。

我需要按类型获取每个类型的原因是将它们显示在客户端的不同位置上?

有没有一种方法只使用一个查询呢?

目前,它看起来像这样:

productPartsEntries = { 
          'color' : db.GqlQuery("SELECT * FROM ProductParts WHERE type = :type", type = 'color'), 
          'style' : db.GqlQuery("SELECT * FROM ProductParts WHERE type = :type", type = 'style'), 
          'size' : db.GqlQuery("SELECT * FROM ProductParts WHERE type = :type", type = 'size') 
// add more.... 
} 

..fredrik

回答

2

您可以使用IN操作符。它会创建三种不同的查询,并在场景下将结果组合在一起。请参阅docs

GQL没有OR运算符。 但是,它确实有一个IN运算符, ,它提供了有限形式的OR。

IN运算符将 属性的值与列表中的每个项目进行比较。 IN运算符相当于多个= 查询,每个值对应一个,即 或OR。对于给定属性,其值为 的实体等于 中的任何一个,则该列表中的值可以返回 用于该查询。

注意:IN和!=运算符在幕后使用多个查询。 例如,IN运算符为列表中的每个项目执行单独的基础数据存储查询 。返回的实体 是所有基础 数据存储区查询的 交叉产物的结果,并且 未重复。任何 单个GQL查询最多允许30个 数据存储查询。

+0

不会ProductParts.gql(“WHERE type =:type”,type =“color”)与使用整个查询相同吗? – fredrik 2010-01-16 13:48:25

+0

是的,这会为你创建gql查询,但你也可以执行'p = ProductParts.gql(“WHERE type IN:types”,types = [“color”,“style”,“size”])' – jbochi 2010-01-16 13:59:12