2015-01-24 2 views
-1

Привет У меня есть таблица 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 количество цветов.

UPDATE:

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

+0

Каковы цвета, сопоставленные с результатом? Является ли это основанием для параметра delaytype или number? Если бы это был параметр delaytype, я бы скорее всего добавил таблицу, которая сопоставляет параметр delaytype с цветом и присоединяется к нему в запросе. Если бы была таблица, содержащая все разные типы дат, вы могли бы добавить туда цветную колонку.Если бы это был номер (или может быть также с задержкой), то, как тепловая карта, где в зависимости от масштаба от min до max цвет назначается масштабированным между двумя цветами, тогда это, вероятно, будет сделано в php. –

+0

Если вы уже получаете тип задержки из базы данных, какой вы есть, не можете ли вы просто в цикле while использовать оператор switch в '$ row ['Delaytype']' для определения значения переменной '$ color', а затем поместить его в' $ myData [] 'вместо этого? – Kai

ответ

2

Добавить еще одну таблицу, которая отображает DelayColorsDelayType в цветах:

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 
+0

Вам просто не хватает группы, но, по сути, я говорил в своем комментарии выше. –

+0

Это дает мне ошибку mysqli fetch – Creaven

+0

Что делает mysqli_error ($ conn) 'после запроса? – Barmar

0

вы имели в виду это:

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

Вы можете изменить RED d YELLOW с значением RGB. Но если вы делаете это только для того, чтобы получить разницу в цвете между строкой так легко читать. Это лучше сделать с помощью CSS, а не SQL, ни PHP.

+0

В то время как это работает, ему становится довольно сложно управлять, когда вы получаете множество разных типов задержки. Кроме того, если вы по существу создаете таблицу из параметра delaytype для color, то почему бы не сохранить ее в таблице. –

+0

@JonathanKuhn: Да, вы правы, лучше сопоставляете цвет, если у вас так много цветов, связанных с этим. Я предполагаю, что он просто хочет сделать разницу между рядами. Я отредактировал свой ответ. –

+0

Да, строки войдут в текст JSON, который будет размещаться на гистограммах и диаграммах. Поэтому мне нужно связать цвет, прежде чем он войдет в JSON – Creaven