PHP for-loop with MySQL 行取决于 MySQL 查询结果

标签 php mysql

我不知道是否有办法做这样的事情:

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/

相关文章:

php - 如何在通过.htaccess 重定向 404 时获取 `$_POST` 查询?

php - 使用 apc_store 与 apc_add 相比有什么性能优势(反之亦然)?

mysql - 如何使用 MySQL 和 SUM 函数从我的数据库中获取总分?

MySQL '!columnName' 顺序不等于 'desc'

php - 两个表 Select Inner Join with order by 和 where and limit 子句

php - PayPal IPN - PHP 和 MySQL

c++ - 在 Windows 7 64 位上使用 MySql 连接器设置 Code::Blocks

mysql - 如何将庞大的数据集加载到新创建的表中?

php - 如何在 xsl 中使用 php 变量?

php - preg_match : ensure the start and the end contains something