我不知道是否有办法做这样的事情:
1 - 获取用户输入(任何有符号/正整数)
2 - 遍历每个数字(例如,用户输入一个正整数,如 10,因此循环经历 10 次迭代)
3 - PHP 代码循环遍历数据库中的 MySQL 表。 MySQL 表如下所示:
+----+------+------+---------+
| ID | ITEM | USER | ACTIONS |
+----+------+------+---------+
| 1 | 1234 | 5 | 0 |
| 2 | 1234 | 3 | 0 |
| 3 | 1234 | 1 | 0 |
| 4 | 1234 | 7 | 0 |
+----+------+------+---------+
4 - PHP 代码应遍历这 4 个 ACTIONS
行中的每一行以找到最小的数字,并开始更新 ACTIONS
字段直到总数为 10表中的“ Action ”。因此,在用户输入值 10 之后,如果我们从最小的数字开始,上表将是这样的:
+----+------+------+---------+
| ID | ITEM | USER | ACTIONS |
+----+------+------+---------+
| 1 | 1234 | 5 | 3 |
| 2 | 1234 | 3 | 3 |
| 3 | 1234 | 1 | 2 |
| 4 | 1234 | 7 | 2 |
+----+------+------+---------+
5 - 如果另一个用户输入 10,表格将是这样的:(请注意,该用户的起点将是第 3 行,即整数 2,因为它是最小数字的第一次出现):
+----+------+------+---------+
| ID | ITEM | USER | ACTIONS |
+----+------+------+---------+
| 1 | 1234 | 5 | 5 |
| 2 | 1234 | 3 | 5 |
| 3 | 1234 | 1 | 5 |
| 4 | 1234 | 7 | 5 |
+----+------+------+---------+
请告知如何做到这一点,我知道足够的 PHP 和 MySQL 代码,因此您可以建议高级语法,但我想不出如何应该如何完成。我不知道从哪里开始。除了遍历 MySQL 行并使用 for 循环遍历用户输入的每个数字之外,我应该如何获得预期结果?
最佳答案
如果并发或表锁不是问题,您可以使用两个查询,一个 SELECT,然后一个 UPDATE,这样您就可以计算最终结果,并且每行只需修改一次值。
增加记录的数量,性能可能开始成为问题,因此值得将 SELECT 限制为前 n(这是正整数)条记录,并且要这样做,一定要添加一个索引到主要递增字段。
您在第二点中要求的循环将对结果集数据进行操作,以生成详细的结果,然后执行查询更新。
$positiveInteger = $_REQUEST['iterations'];
//sanitization...
$sql = 'SELECT id, actions FROM item_counters LIMIT :limit';
$db->connect();
$db->prepare($sql);
$db->bindInteger(':limit',$positiveInteger);
$db->execute();
$rows = $db->fetchAll();
$totalRecords = count($rows);
$incrementValue = intval($positiveInteger / $totalRecords);
$maxIncrementLimit = $positiveInteger % $totalRecords;
$currentRecord = 1;
$results = [];
foreach($rows as $row){
if($currentRecord <= $maxIncrementLimit){
$addition = $incrementValue + 1;
}else{
$addition = $incrementValue;
}
$results[$row['id']] = $row['action'] + $addition;
$currentRecord++;
}
//then build the query (a little hacky: https://stackoverflow.com/a/27593831/2622455)
$sql = "...";
$db->query($sql);
$db->close();
关于PHP for-loop with MySQL 行取决于 MySQL 查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54874987/