在我的MySQL表中,有一行标记为“state”。这可能有3个值。我怎样才能利用PHP来回应“Unbanned”在状态中被称为“0”?并且“被禁止”被认为是“1”和“被禁止”被认为是“3”?
我如何使用php在MySQL中显示“UnBanned”而不是0?我正在使用一张桌子。
<?
while($row = $result->fetch_assoc()){
echo'<td>' . $row['player'] . '</td>';
echo'<td>' . $row['admin'] . '</td>';
echo'<td>' . $row['reason'] . '</td>';
echo'<td>' . $row['created_at'] . '</td>';
echo'<td>' . $row['expires_at'] . '</td>';
echo'<td>' . $row['state'] . '</td>' . '</tr>';
}
?>
非常感谢所有帮助:)
答案 0 :(得分:3)
您可以通过PHP或MySQL来完成。有很多可能性。
SELECT
CASE
WHEN state = 0 THEN 'UnBanned'
WHEN state = 1 THEN 'Banned'
ELSE 'Temp-Banned'
END AS state
在PHP中:
while ($row = $result->fetch_assoc()) {
switch ($row['state']) {
case 0: $row['state'] = "UnBanned";
break;
case 1: $row['state'] = "Banned";
break;
default: $row['state'] = "Temp-Banned";
}
答案 1 :(得分:2)
<?
while($row = $result->fetch_assoc()){
echo'<td>' . $row['player'] . '</td>';
echo'<td>' . $row['admin'] . '</td>';
echo'<td>' . $row['reason'] . '</td>';
echo'<td>' . $row['created_at'] . '</td>';
echo'<td>' . $row['expires_at'] . '</td>';
switch ($row['state']){
case 0: echo '<td>Unbanned</td>';
break;
case 1: echo '<td>Banned</td>';
break;
case 3: echo '<td>Temp-Banned</td>';
break;
}
}
?>
或者,您可以查找记录为以下状态的查找表:
STATE
STATEID STATE
0 Unbanned
1 Banned
3 Temp-Banned
在您的玩家表中,您拥有一个外键,用于存放StateId的状态。
将您的查询更改为:
SELECT * FROM Players JOIN STATE on STATE.STATEID=Players.state WHERE...
我喜欢破坏这样的东西,以后可以很容易地创建可选择的列表,如果创建了其他可能的状态,它可以在长期内更加可扩展...就像你想要将Temp-Banned分成几个组一样,30-60天禁令,全季禁令等,您只需更改表中的记录,而不必搜索所有查询和切换语句。
答案 2 :(得分:0)
您可以使用CASE statement
中的MYSQL
或者如果您没有多个州使用以下代码:
<?
$a = array('0'=>'Unbanned','1'=>'Banned','3'=>'Temp-Banned');
while($row = $result->fetch_assoc()){
echo'<td>' . $row['player'] . '</td>';
echo'<td>' . $row['admin'] . '</td>';
echo'<td>' . $row['reason'] . '</td>';
echo'<td>' . $row['created_at'] . '</td>';
echo'<td>' . $row['expires_at'] . '</td>';
echo'<td>' . $a[$row['state']] . '</td>' . '</tr>';
}
?>