如果我有两个表,客户和订单,我要查找最新的订单客户,我将如何使用GQL做到这一点在谷歌应用程序引擎?

通常,我将通过外键,CUSTOMER_ID,它存在于订单表连接这两个表

select orders.* from customers, orders 
where customers.customer_id = orders.customer_id
and orders.order_id = (select top 1 sub_orders.order_id from orders sub_orders 
                where sub_orders.customer_id = orders.customer_id 
                order by sub_orders.order_date desc)

然而,由于加入似乎不能够在谷歌App Engine的,我不知道如何解决此限制。任何建议,将不胜感激。

有帮助吗?

解决方案

在谷歌App Engine的数据存储是真正从关系型数据库完全不同。有一些相似之处,但它当你设计你的数据模型,以了解这些差异是非常重要的。

你通常会定义这种关系的方式是通过使用参考属性:

class Customer(db.Model):
    name = db.StringProperty()

class Order(db.Model):
   customer = db.ReferenceProperty( Customer,
                                    collection_name = 'orders' )

在Order实体定义导致在客户实体创建一个属性的的ReferenceProperty,命名为“订单”,因此,如果“客户”是一个客户实例,您可以参考“客户找到所有的订单。命令'。

例如:

customer = Customer.gql("WHERE name = :1", "Bob")[0] # Returns the first customer named Bob
order1 = customer.orders[0]
order2 = customer.orders.order("date")[0] # Sorts the Orders by date and gets the first one

参考属性都记录

要了解的另一个重要概念是实体组的想法。在一个实体组实体被存储在同一节点上,因此,它们可以被存储并更有效地检索。他们还利用交易是至关重要的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top