2013-10-07 2 views
1

В моей таблице MySQL есть строка с надписью «Состояние». Для этого есть 3 значения. Как я могу использовать PHP для эха «Небезопасно», как указано в «0» в состоянии? И «Запрещено», как указано «1» и «Temp-Banned», как указано в «3»?MySQL, если? statement

Как использовать php для отображения «UnBanned» вместо 0 в MySQL? Для этого я использую таблицу.

<? 
      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

Сообщение запроса. – Mihai

+0

@Mihai http://pastebin.com/1H1FyefC –

ответ

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"; 
    } 
+2

Я думаю, что OP должен создать таблицу возможного статуса ' – Kermit

+0

@FreshPrinceOfSO Это будет отлично работать, поскольку вы можете выбрать имя состояния, присоединившись к ID, который будет номером –

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 дней, запрет на полный сезон и т. д., вы просто меняете записи в таблице, а не должны искать все свои запросы и операторы переключения.

+1

Вы забыли 'case' в своем' switch() ':-P –

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>'; 
      } 
?>