【问题标题】:Why Are My Query Results Coming Back Randomly?为什么我的查询结果随机返回?
【发布时间】:2017-01-17 16:10:02
【问题描述】:

我正在查询一个 SQL 数据库,但由于某种原因,结果项随机返回。这是我的代码:

for items in searchFriendEmailArrayNew {

        let query = table.query(with: NSPredicate(format: "email == '\(items)'"))

        query.selectFields = ["isriding"]

        query.read { (result, error) in
            if let err = error {

                print("ERROR ", err)

            } else if let items = result?.items {

                for item in items {

                    let theItem = item["isriding"] as! Bool
                    let newItem = String(theItem)

                    self.searchFriendIsRidingArray.add(newItem)

                    loopCount = loopCount+1

                    if loopCount == self.friendsArray.count {

                        self.tableView.reloadData()
                        self.activityIndicator.isHidden = true
                        self.activityIndicator.stopAnimating()
                    }
                }

            }

        }

    }

searchFriendEmailArrayNew 是一个电子邮件地址数组,因此当我查询数据库表时,它使用电子邮件来查找该用户。数组始终保持一致且顺序相同:

  • user1@email.com
  • user2@email.com
  • user3@email.com
  • user4@email.com

而且查询总是按这个顺序完成的。

然后我查询用户的选定字段,在这种情况下,我查询的是“isriding”字段。此字段是返回 true 或 false 的布尔值。

但是,当我进入“for item in items”时,结果会以随机顺序返回。例如,假设 user1 'is ride = true' 但所有其他用户均为 false,返回的项目可能如下所示:

  • 是假的
  • 是假的
  • 骑马
  • 是假的

如果我再次运行代码,它可能如下所示:

  • 骑马
  • 是假的
  • 是假的
  • 是假的

任何人都可以告诉他们为什么他们可能会以随机顺序返回,即使在查询表时它总是以特定顺序查询。

感谢您的帮助。

【问题讨论】:

  • 看看这个,但作为一个旁注,你为什么使用循环计数来确定你是否在列表的末尾,你不能把那个代码放在循环之外吗?
  • 我不确定您使用的是什么(我还没有快速完成 SQL),但可能是您需要在查询中添加订单参数,否则查询可能会返回结果以其他顺序,例如插入这些对象的顺序?
  • 如果您需要特定的订单,您需要在 SQL 中使用ORDER BY。关系数据库中的行以任何方式“排序”。但是由于您的问题不包含任何 SQL 代码,因此很难说出您需要更改的位置和内容。
  • 谢谢 a_horse_with_no_name。没有 SQL 代码,因为我在 Azure 上查询 SQL DB,所以基本上我需要做的就是查询表以返回结果。

标签: sql arrays swift for-loop


【解决方案1】:

您可能需要在构建查询时指定一个顺序,否则结果的顺序可能与您提供的顺序不同。

可以通过使用“Order by”子句来强制查询的顺序 该声明。 SQL 数据库实际上并不了解什么顺序 你把东西放进去,或者按照给定的顺序存储数据。这意味着 你需要告诉 SQL 你想要的项目是什么顺序。

Why do results from a SQL query not come back in the order I expect?

【讨论】:

  • 感谢迈克的回复。这是一个很好的观点,也是我考虑过的事情,但是由于它只是一个真假返回,我需要按照它们在表中的顺序返回结果,否则我只能按升序或降序排序。话虽如此,如果我更改代码的其他一些方面,可能会有一种使用排序的方法。非常感谢。
  • np - 我相信这可以通过使用类似于 SQL FIELD() 函数的东西来完成。请参阅stackoverflow.com/a/396771/3132984,因为这可能是相关的。我相信这可以让你按输入排序,但我绝对是一个 SQL 菜鸟。
猜你喜欢
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 2020-02-03
相关资源
最近更新 更多