2010-04-21 21 views

उत्तर

12

हाँ, यह बहुत अधिक है। उन सभी इकाइयों को पुनर्प्राप्त करें जिन्हें आप जोड़ना चाहते हैं, और उन्हें अपने ऐप में जोड़ दें। जीक्यूएल में SUM नहीं है।

यदि आप जो करने की कोशिश कर रहे हैं वह किसी इकाई के लिए औसत रेटिंग ढूंढना है, तो बेहतर तरीका है।

class RateableThing(db.Model): 
    num_ratings = db.IntegerProperty() 
    avg_rating = db.FloatProperty() 

ढूँढना बात की औसत रेटिंग एक सरल देखने जाता है, और एक नया रेटिंग जोड़ने बस है:

thing.avg_ratings = ((thing.avg_ratings * thing.num_ratings) + new_rating)/thing.num_ratings + 1 
thing.num_ratings += 1 
thing.put() 

App इंजन डेटासंग्रह के प्रचलित मुहावरे के रूप में ज्यादा काम करने के लिए है के रूप में आप पर कर सकते हैं लिखो, और पढ़ने पर जितना संभव हो सके, क्योंकि पढ़ना अधिक बार होता है।

+0

हो क्या आप रेटिंग लिखने के लिए प्रत्येक लिखने में मतलब रखते हैं और इसे प्रत्येक लेखन पर लिखते हैं और पढ़ने पर गणना नहीं करते हैं? चीज़ को बुलाता है। num_ratings इकाइयों का पूरा योग हो जाता है? या मुझे प्रत्येक लेखन पर संख्याओं को बस ऊपर रखना चाहिए? क्योंकि मैं डेटास्टोर को डुप्लिकेशंस में ले जाता हूं और प्रत्येक रेटिंग के लिए चाबियाँ सहेजता हूं ताकि मैं जान सकूं कि किसने रेट किया और किस तरह से। मैं एक ऐसी इकाई नहीं चाहता जो अद्यतन रखती है। क्या यही मतलब है तुम्हारा? – Alon

+0

'num_ratings' चीज को रेट करने की संख्या कितनी बार है। इसलिए प्रत्येक बार जब आप रेटिंग जोड़ते हैं, तो 'num_ratings' वृद्धि' - यदि आप किसके मूल्यांकन के ट्रैक रखना चाहते हैं, तो आप उपयोगकर्ताओं की 'ListProperty' रख सकते हैं। यदि आप ट्रैक करना चाहते हैं कि किसने रेट किया है, * और उन्होंने क्या रेटिंग *, 'रेटिंग' (उपयोगकर्ता और स्कोर) ऑब्जेक्ट्स की 'लिस्टप्रोपर्टी' है। लेकिन फिर भी चीज की रेटिंग के प्रत्येक पढ़ने पर गणना से बचने के लिए सरल रेटिंग (num_ और avg_) रखें। केवल तभी जब आप पूर्ण रेटिंग डेटा का निरीक्षण करना चाहते हैं, तो क्या आप उपयोगकर्ता रेटिंग की सूची में जाना चाहिए। –

+0

इसलिए मुझे रेटिंग के लिए हमेशा सारांश तालिका रखना चाहिए जहां मैं गणना के लिए उपयोगकर्ता की प्रत्येक रेटिंग पर रेटिंग बढ़ाता हूं। बहुत बहुत धन्यवाद :) – Alon

0

मैं आपके प्रश्न के Google अनुप्रयोग इंजन हिस्सा जवाब कर सकते हैं नहीं है, लेकिन अपने कोड (यदि आप एक += को + बदलने) के बराबर है: मैं बहुत यकीन है कि आप उपयोग कर सकते हैं कर रहा हूँ

ratingsum = sum(ratings) 

sum() किसी अनुक्रम या पुनरावर्तनीय संख्या वाले ऑब्जेक्ट्स पर।

+0

आपके उत्तर में, मैं नहीं कर सकता। यह एक फ्लोट है। 4.5। मैं इसे जोड़ नहीं सकता और इसे जोड़ सकता हूं। यह पुन: प्रयोज्य नहीं है :( – Alon

संबंधित मुद्दे