2015-02-24 29 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