为了账号安全,请及时绑定邮箱和手机立即绑定

我对使用 IF 更新 SQL 列有疑问

我对使用 IF 更新 SQL 列有疑问

PHP
万千封印 2021-08-27 10:35:02
我正在尝试使用IF语句来更新数据库中的列。if($data[chat_points] != '2001'){    $mysqli->query("UPDATE boom_users SET user_level = 1 WHERE user_id = '{$data['user_id']}'");}if($data[chat_points] != '5000'){    $mysqli->query("UPDATE boom_users SET user_level = 2 WHERE user_id = '{$data['user_id']}'");}if($data[chat_points] != '15001'){    $mysqli->query("UPDATE boom_users SET user_level = 3 WHERE user_id = '{$data['user_id']}'");}if($data[chat_points] != '35001'){    $mysqli->query("UPDATE boom_users SET user_level = 4 WHERE user_id = '{$data['user_id']}'");}if($data[chat_points] != '45001'){    $mysqli->query("UPDATE boom_users SET user_level = 5 WHERE user_id = '{$data['user_id']}'");}if($data[chat_points] != '70001'){    $mysqli->query("UPDATE boom_users SET user_level = 6 WHERE user_id = '{$data['user_id']}'");}使用此代码,它始终将“user_level”更新为 6。我想要的是,当用户获得 2001 个聊天点时……更新到 1 级,当他们获得 5000 个聊天点时……更新到 2 级等。有人可以解释我做错了什么吗?
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

你的代码没有意义。它将始终为 5(当点数 == 70001 时)或 6(所有其他点数)。


我希望应该有条件“低于”,所以


if($data[chat_points] < '2001'){

    $mysqli->query("UPDATE boom_users SET user_level = 1 WHERE user_id = '{$data['user_id']}'");

}

elseif($data[chat_points] < '5001'){

    $mysqli->query("UPDATE boom_users SET user_level = 2 WHERE user_id = '{$data['user_id']}'");

}

elseif($data[chat_points] < '15001'){

    $mysqli->query("UPDATE boom_users SET user_level = 3 WHERE user_id = '{$data['user_id']}'");

}

elseif($data[chat_points] < '35001'){

    $mysqli->query("UPDATE boom_users SET user_level = 4 WHERE user_id = '{$data['user_id']}'");

}

elseif($data[chat_points] < '45001'){

    $mysqli->query("UPDATE boom_users SET user_level = 5 WHERE user_id = '{$data['user_id']}'");

}

elseif($data[chat_points] < '70001'){

    $mysqli->query("UPDATE boom_users SET user_level = 6 WHERE user_id = '{$data['user_id']}'");

}


或者更好,更短,更快......


$levels = [

    2001,

    5001,

    15001,

    35001,

    45001,

    70001

];


$level = 1;

foreach ($levels as $v) {

    if ($data['chat_points'] >= $v) $level++;

}


mysqli->query ("UPDATE boom_users SET user_level = " . (int)$level . " WHERE user_id = '{$data['user_id']}'");


if ($level <= count($levels)) {

    echo 'Needed to next level: ' . ($levels[$level - 1] - $data['chat_points']) . ' points';

} else {

    echo 'Max level';

}


查看完整回答
反对 回复 2021-08-27
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

我们必须获得当前的用户级别。只需一个电话


$sql = "SELECT user_level FROM boom_users WHERE user_id = '{$data['user_id']}'");    

//get the current user level

$level = $mysqli->query($sql)->fetch_object()->user_level;


//compare if user approached the 2001 limit but not exceed 5000 limit 

if($data[chat_points] >= '2001' && $data[chat_points] < '5000' && $level != 1){

    $mysqli->query("UPDATE boom_users SET user_level = 1 WHERE user_id = '{$data['user_id']}'");

}

在这种情况下,只有在用户具有较低的 user_level 的情况下,我们才会进入 if 语句,如果他具有以上我们跳过。1 次调用 DB 之前,如果语句为真,再调用一次更新。


查看完整回答
反对 回复 2021-08-27
?
POPMUISE

TA贡献1765条经验 获得超5个赞

如果我没有误解你的问题,那么这种方式怎么样?


<?php

$levels = [2001=>1, 5001=>2, 15001=>3, 35001=>4, 45001=>5, 70001=>6];


if(!empty($data['chat_points']) && array_key_exists($data['chat_points'],$levels)){

    $mysqli->query("UPDATE boom_users SET user_level = {$levels[$data['chat_points']]} WHERE user_id = '{$data['user_id']}'");

}

?>


查看完整回答
反对 回复 2021-08-27
  • 3 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信