2015-02-24 41 views
1

我有一個名爲「當前狀態」表上,它被稱爲三列:更換MySQL的coloumn值

id name state 
1 FXD  1 
2 GFX  3 
3 ATOM 2 
4 FARB 3 
5 REX  1 
6 FRX  2 

在下面的代碼我讓它進入陣列和打印:

$exc = $conn->prepare("SELECT name,state from current_state"); 
     $exc->execute(); 
      while($finalResult = $exc->fetch(PDO::FETCH_ASSOC)) 
      { 
         $tables[] = $finalResult; 
      } 
var_dump($tables); 

但問題是,雖然數字表示狀態列中的值的每個這些數字的具有含義:

1 = running 
2 = finished 
3 = dimnished 

所以我想要通過比較狀態列的值立即將上述字符串值添加到表數組。

列的當前打印結果會是什麼樣子

array (size=2) 
    'name' => string 'FRX' (length=11) 
    'state' => string '2' (length=1) 

但我想要的是:

array (size=2) 
     'name' => string 'FRX' (length=11) 
     'state' => string 'finished' (length=8) 

回答

1

您可以用CASE表達做到在SQL:

SELECT name, 
     CASE state 
      WHEN 1 THEN 'running' 
      WHEN 2 THEN 'finished' 
      WHEN 3 THEN 'diminished' 
     END AS state 
FROM current_state 

或者你可以用PHP做一個數組:

$statemap = array(1 => 'running', 2 => 'finished', 3 => 'diminished'); 

那麼你的PHP循環會做的映射:

while ($finalResult = $exc->fetch(PDO::FETCH_ASSOC)) { 
    $finalResult['state'] = $statemap[$finalResult['state']]; 
    $tables[] = $finalResult; 
} 

最後,你可以有一個包含映射另一個表,並與它一起:

CREATE TABLE state_mappings (
    state_num INT PRIMARY KEY, 
    state_name VARCHAR(20) 
); 

SELECT name, state_name 
FROM state AS s 
JOIN state_mappings AS m ON s.state = m.state_num 
+0

感謝巴爾梅爾生病嘗試並讓你kn – 2015-02-24 17:02:35

+0

你的男人!每一步都奏效 – 2015-02-24 18:18:40