关于GQL的使用问题

2010-12-04 22:36:56 +08:00
 Weakdancer
今天刚看了GAE database ,对GQL的使用很困惑


<script src="https://gist.github.com/728218.js"> </script>


NowDay,NoTime,NowWeek,都是整型.


现在我想实现代码中的那句查询用GQL该怎么写?

这样写肯定不对:

db.GqlQuery("SELECT * FROM time WHERE KCB.time[0] =NowDay AND KCB.time[-1] =NowTime AND NowWeek IN KCb.week ORDER BY date DESC LIMIT 1000")

应该怎么写呢?望指教.
4182 次点击
所在节点    Google App Engine
3 条回复
Weakdancer
2010-12-04 22:38:44 +08:00
Weakdancer
2010-12-04 22:40:22 +08:00
keakon
2010-12-05 01:43:49 +08:00
楼主的表述真的很难懂…

没猜错的话,你是要把if NowDay==KCB.time[0] and NowTime==KCB.time[-1] and NowWeek in KCB.week改成GQL查询条件吧

简单来说就是不行,因为datastore不支持复杂的查询,只能将一个属性作为一个整体来查询,不能查询time[-1]这种

因此你只能这样:
KCBs = db.GqlQuery("SELECT * FROM kcb WHERE week = :1 ORDER BY date DESC LIMIT 1000", NowWeek)
for KCB in KCBs:
if NowDay==KCB.time[0] and NowTime==KCB.time[-1]:
#...

week是一个ListProperty,查询的时候直接用=就行了,IN的语义不是你理解的这样的

最后提醒一下,不是有特殊需求的话不要用GQL,因为查询较复杂时,构造非常不方便,而且性能很差。所有GqlQuery对象都能用等价且更方便高效的Query代替。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/5394

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX