我有一个名为“当前状态”的表,它有三列,称为:
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,所以我想要的是,通过比较state列的值,立即将上面的字符串值添加到表数组中。
列的当前打印结果如下所示
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)发布于 2015-02-24 16:51:10
您可以使用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_numhttps://stackoverflow.com/questions/28701405
复制相似问题