【发布时间】: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,所以基本上我需要做的就是查询表以返回结果。