如何从Parse表中返回列的总和?

时间:2015-05-20 19:42:27

标签: ios swift parse-platform

我正在构建一个iOS应用程序,将网球中的获胜组合保存到Parse中的Class。它可以节省团队,日期,季节和胜利次数。 wins列是一个数字字段。对于1季,即2015年夏季,将有几行。第1队在第1天有2胜,第2队有1胜。在第2天,第1队有3胜,第2队有0胜。

我不确定将每个赛季和团队的胜利总和检索到我的应用程序的最佳策略。

我想检索"第1队= 5胜"并且"第2队= 1胜#34;对于当前数据。

在SQL中,我将构建一个视图并检索该结果。不知道如何在Swift / Parse中解决这个问题。任何建议表示赞赏。

我可以查询"评分"课程,它根据季节返回每个单独的分数。即2,2,2,3,1。但是,对于如何将它们存储在我的数组中并返回10的总和有一些困惑。代码如下:

import UIKit
import Parse

class viewSumPractice2: UIViewController {
  var seasonSelect = ""
  var winners = 0

@IBOutlet weak var seasonSelected: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

    seasonSelect = "Summer 2015"

    seasonSelected.text = seasonSelect

    var query = PFQuery(className:"Scoring")
    query.whereKey("season", equalTo:self.seasonSelect)
    query.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]?, error: NSError?) -> Void in

        if error == nil {

           if let objects = objects as? [PFObject] {

                for object in objects {

                   self.winners = object["wins"] as! NSInteger
                //this returns correct values     
                   println(self.winners)
                 //this needs work   
                    var winsArray = [self.winners]
                    winsArray.append(self.winners)

                    let totalWins = winsArray.reduce(0, combine: +)
                    println(totalWins)
                }

            }
        } else {

            println("Error")
        }

    }

}

//修复了如下代码,以便从数组中获得正确的总和。

import UIKit
import Parse

class viewSumPractice2: UIViewController {

//var winner = [Int]()
var seasonSelect = ""
var winners = 0

@IBOutlet weak var seasonSelected: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

    seasonSelect = "Summer 2015"

    seasonSelected.text = seasonSelect

    var winsArray = [self.winners]

    var query = PFQuery(className:"Scoring")
     query.whereKey("season", equalTo:self.seasonSelect)
    query.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]?, error: NSError?) -> Void in

        if error == nil {

           if let objects = objects as? [PFObject] {
              //  if let objects = objects  {
                for object in objects {

                   // var winners = 0
                   self.winners = object["wins"] as! NSInteger
                  winsArray.append(self.winners)
                  // println(self.winners)
                }

            }
        } else {

            println("Error")
        }

        let totalWins = winsArray.reduce(0, combine: +)
        println(totalWins)

    }

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}

1 个答案:

答案 0 :(得分:0)

Parse对于您在SQL中习惯的列没有SUM()COUNT()函数。如果您预计您的数据集仍然很小,那么我就这样做:

  1. 查询Tennis
  2. 枚举记录并将wins列存储在数组中
  3. 当您完成后,将数组中的所有项目相加以获得总胜利。这可以在Swift中完成,如下所示:let totalWins = winsArray.reduce(0, combine: +)
  4. 如果您希望拥有数千条记录,则上述解决方案将遇到查询限制。我建议手动跟踪胜利,如下所示:

    1. 使用Total列和totalWins列制作新的team课程
    2. 查询Total
    3. 获取特定团队的totalWins
    4. 将新的胜利添加到totalWins并保存回Parse
    5. 对于曾经主要在SQL中自动执行的所有这些额外工作似乎很愚蠢,但它确实并不难,并且保持数据库性能高并使您的Parse请求确实很有意义快。

      祝你好运!