猿问

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

我正在尝试使用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 级等。


有人可以解释我做错了什么吗?


万千封印
浏览 168回答 3
3回答

LEATH

你的代码没有意义。它将始终为 5(当点数 == 70001 时)或 6(所有其他点数)。我希望应该有条件“低于”,所以if($data[chat_points] < '2001'){&nbsp; &nbsp; $mysqli->query("UPDATE boom_users SET user_level = 1 WHERE user_id = '{$data['user_id']}'");}elseif($data[chat_points] < '5001'){&nbsp; &nbsp; $mysqli->query("UPDATE boom_users SET user_level = 2 WHERE user_id = '{$data['user_id']}'");}elseif($data[chat_points] < '15001'){&nbsp; &nbsp; $mysqli->query("UPDATE boom_users SET user_level = 3 WHERE user_id = '{$data['user_id']}'");}elseif($data[chat_points] < '35001'){&nbsp; &nbsp; $mysqli->query("UPDATE boom_users SET user_level = 4 WHERE user_id = '{$data['user_id']}'");}elseif($data[chat_points] < '45001'){&nbsp; &nbsp; $mysqli->query("UPDATE boom_users SET user_level = 5 WHERE user_id = '{$data['user_id']}'");}elseif($data[chat_points] < '70001'){&nbsp; &nbsp; $mysqli->query("UPDATE boom_users SET user_level = 6 WHERE user_id = '{$data['user_id']}'");}或者更好,更短,更快......$levels = [&nbsp; &nbsp; 2001,&nbsp; &nbsp; 5001,&nbsp; &nbsp; 15001,&nbsp; &nbsp; 35001,&nbsp; &nbsp; 45001,&nbsp; &nbsp; 70001];$level = 1;foreach ($levels as $v) {&nbsp; &nbsp; 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)) {&nbsp; &nbsp; echo 'Needed to next level: ' . ($levels[$level - 1] - $data['chat_points']) . ' points';} else {&nbsp; &nbsp; echo 'Max level';}

慕尼黑的夜晚无繁华

我们必须获得当前的用户级别。只需一个电话$sql = "SELECT user_level FROM boom_users WHERE user_id = '{$data['user_id']}'");&nbsp; &nbsp;&nbsp;//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&nbsp;if($data[chat_points] >= '2001' && $data[chat_points] < '5000' && $level != 1){&nbsp; &nbsp; $mysqli->query("UPDATE boom_users SET user_level = 1 WHERE user_id = '{$data['user_id']}'");}在这种情况下,只有在用户具有较低的 user_level 的情况下,我们才会进入 if 语句,如果他具有以上我们跳过。1 次调用 DB 之前,如果语句为真,再调用一次更新。

POPMUISE

如果我没有误解你的问题,那么这种方式怎么样?<?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)){&nbsp; &nbsp; $mysqli->query("UPDATE boom_users SET user_level = {$levels[$data['chat_points']]} WHERE user_id = '{$data['user_id']}'");}?>
随时随地看视频慕课网APP
我要回答