向表中添加颜色列

时间:2015-01-24 00:34:07

标签: php mysql

您好我有一个名为延迟的SQL表

Delaytype   | Delayhours
Engineering |      1
Engineering |      2
Human Error |      4

我使用以下内容查询此表:

"SELECT Delaytype, SUM('Delayhours') as cnt FROM delays GROUP BY 
Delaytype;" //

在我的PHP中,如果我

echo ' <tr><td>'.$row['Delaytype'].'</td>td>'.$row 
['Delayhours'].'</td></tr>

我得到了

Engineering 3 
Human Error 4

我需要一种为此添加颜色的方法。

所以

我可以输出

echo ' <tr><td>'.$row['Delaytype'].'</td><td>'.$row 
['Delayhours'].'</td><td>'.$row['color'].'</td></tr> 

这是因为我需要在我的JSON中放置与Delaytype相关联的颜色。

因此工程变红,人为错误变黄。

目前我在做:

sql query ... 
$myData = array();

while($row = mysqli_fetch_array($result))
{
$myData[] = array('value =>(int)$row['cnt'],color => '#878BB6');

这一切都有效但我在每个数据集中都得到相同的颜色

json_encode($myData); 

这对我来说并不令人惊讶。我想知道如何用PHP为我的数组添加颜色。或者是一个SQL解决方案,它可以让我只创建一个列。

延迟类型不是动态的,它将是一个设定的数量,所以我只需要能够得到x个颜色。

更新:

i know have two tables 
1) delays --- Delaytype | Delayhours  \\ correct case
2) delaycolors --- Delaytype | Color  \\correct case

I am getting errors with the following query : 

$result = ($con, "SELECT d.Delaytype, c.Color, SUM('Delayhours') AS cnt
FROM delays AS d
JOIN delaycolors AS c ON d.Delaytype = c.Delaytype
GROUP BY d.Delaytype; ");

这给我一个提取错误,表明上述方法无效。 @Barmer

2 个答案:

答案 0 :(得分:2)

添加另一个将DelayColors映射到颜色的表DelayType

Delaytype   | Color
Engineering | red
Human Error | yellow

然后在您的查询中使用JOIN

SELECT d.DelayType, c.color, SUM(DelayHours) AS cnt
FROM delays AS d
JOIN DelayColors AS c ON d.DelayType = c.DelayType
GROUP BY d.DelayType

答案 1 :(得分:0)

你的意思是:

SELECT Delaytype, 
    SUM('Delayhours') as cnt, 
    (SELECT CASE WHEN Delaytype = 'Engineering' THEN 'RED' ELSE 'YELLOW' END as color) 
FROM delays 
GROUP BY Delaytype

您可以使用RGB值更改REDYELLOW。但是,如果你这样做只是为了获得行之间的差异,这样便于阅读。它最好通过CSS而不是SQL来完成。