gpt4 book ai didi

php - 是否可以遍历 mysql 表行并检查列?

转载 作者:搜寻专家 更新时间:2023-10-30 23:35:58 25 4
gpt4 key购买 nike

我有一个“矩阵”表,其中填充了以下列。

matrix_id, user_id, position_1, position_2, position_3
1 1 1982 2251 5841
2 2 6204 0 0
3 3 0 0 0
4 4 0 0 0

我基本上想做以下事情。

  1. 找到 user_id 最低且位置为空的行。
  2. 在上面的示例中,这将是 user_id 2 和 position_2。
  3. 我用查询更新行。
  4. 然后我移动到下一个空位置。由于 user_id 2 仍然有一个空的 position_3,我再次使用查询更新该行。
  5. 由于该行已完成,我继续查看具有空位置的下一个最高 user_Id。在本例中,它是 user_id 3,然后是 user_id 4。

如果我知道 user_id 是什么,我知道我可以执行上述所有操作。但假设在这种情况下,我不知道 user_id 是什么。那么查询会是什么样子?

这是我目前所拥有的。

$find_user = $db->prepare("SELECT * FROM matrix WHERE user_id > :user_id");
$find_user->bindValue(':user_id', 0);
$find_user->execute();
$result_user = $find_user->fetchAll(PDO::FETCH_ASSOC);
if(count($result_user) > 0) {
foreach($result_user as $row) {
$matrix_id = $row['matrix_id'];
$user_id = $row['user_id'];
$position_1 = $row['position_1'];
$position_2 = $row['position_2'];
$position_3 = $row['position_3'];
}
} else {
$errors[] = 'User Id not found in Matrix.';
}

$update_user = $db->prepare("UPDATE matrix SET position_2 = :position_2 WHERE user_id = :user_id");
$update_user->bindValue(':position_2', 1564;
$update_user->bindParam(':user_id', $user_id);
if($update_user->execute()) {}

最佳答案

这应该遍历所有用户,从最小的 user_id 到最大的。

对于每个用户,它将按顺序检查相关列并将新值应用于空列。

$new_val = 1999;

$result = $db->query("SELECT * FROM matrix ORDER BY user_id");
$users = $result->fetchAll(PDO::FETCH_ASSOC);
if(count($users) > 0) {

// prepare all the possible queries
// make use of prepare once execute many times
$stmt1 = $db->prepare("UPDATE `matrix` SET `position_1` = :pos WHERE `user_id` = :id");
$stmt2 = $db->prepare("UPDATE `matrix` SET `position_2` = :pos WHERE `user_id` = :id");
$stmt3 = $db->prepare("UPDATE `matrix` SET `position_3` = :pos WHERE `user_id` = :id");

foreach($users as $user) {
if ( $user['$position_1'] == 0 ) {
$stmt1->execute( array(':pos'=>++$new_val,':id'=>$user['user_id']) );
}
if ( $user['$position_2'] == 0 ) {
$stmt1->execute( array(':pos'=>++$new_val,':id'=>$user['user_id']) );

}
if ( $user['$position_3'] == 0 ) {
$stmt1->execute( array(':pos'=>++$new_val,':id'=>$user['user_id']) );
}
}
} else {
$errors[] = 'User Id not found in Matrix.';
}

您可以通过稍微更改查询以仅查找具有要修复的列的用户来减少要处理的行数

$result = $db->query("SELECT * 
FROM matrix
WHERE position_1 = 0
OR position_2 = 0
OR position_3 = 0
ORDER BY user_id");

关于php - 是否可以遍历 mysql 表行并检查列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42404865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com