php - 更新 Select 查询循环所基于的字段
问题描述
这是我的 mysql 查询的一个粗略示例(注意:这是在通过所有用户的另一个循环中):
$query = db.query('SELECT * FROM table WHERE userid = $uid AND reminded = 0');
while ($row = $query->fetch()) {
// send personalized reminder email to the user
db.query('UPDATE table SET reminded = 1 WHERE userid = $uid');
}
对于该用户的所有实例,该字段reminded
都设置为 1。
我的问题是:查询/while (fetch) 是否已经根据原始条款 ( reminded = 0
) 加载到内存中,或者剩余的 while 循环是否会根据这些更新 ( reminded = 1
) 运行?
假设用户有 50 行,其中reminded
0 为 0,并且查询选择了这些:即使在循环期间它们都被更改为 1,它们是否仍然存在于 while 循环的其余部分中,值为 0?
解决方案
假设您拥有的代码和 SQL 只是一个示例(因为您应该直接更新而无需 php 循环)。
对行的提取table
是在 DB 上逐行执行的。
因此,如果在 while 循环中更新了这些行中的一个或多个,在下一次迭代中,您将检索和更新(再次)先前更新的行。
ORDER BY
我认为“仅”在更新作为索引一部分的字段或在 SQL 中用于检索数据的字段(例如,在 中使用的字段等)时,您必须小心。
推荐阅读
- intellij-idea - 在 IntelliJ 中运行 JUnit 测试时如何防止想法测试输出文件?
- python - 下载 spacy 模型并获取 AttributeError 'NoneType' 对象没有属性 'ndarray'
- javascript - 在 xtype tagfield 中,发送到服务器的值显示为单个组合行。extjs
- google-bigquery - 按首选顺序进行正则表达式和子分类的有效方法
- javascript - 忽略 Firestore 中的 DocID
- php - 成功登录后,我应该在会话、全局变量或每个页面上的查询中保存用户数据吗?
- c# - Azure Functions - Cosmos db 输入绑定查询不起作用
- r - 对列表中的列表进行操作,将结果存储在全局环境中
- java - SpringBoot 项目中的占位符 application.properties 文件
- dart - Dart 中表达式和语句的区别?