2014-09-25 7 views
0

У меня есть данные этой таблицы:сочетающие строки в результате

+-ID-+-sensorID-+----date---+-value-+ 
| 1 | 1  |'some date'| 20 | 
| 2 | 1  |'some date'| 15 | 
| 3 | 1  |'some date'| 18 | 
| 4 | 2  |'some date'| 40 | 
| 5 | 2  |'some date'| 68 | 
| 6 | 2  |'some date'| 55 | 

Теперь я хочу, чтобы создать массив, как это в PHP:

date - value sensorID(1) - value sensorID(2) 

мне нужно что-то, чтобы показать, когда дата имеет одно значение датчика:

[date] => 01-01-2014 [value] => 50 [value] => 60 
[date] => 02-01-2014 [value] => 20 [value] => 30 
[date] => 03-01-2014 [value] => null [value] => 55 
[date] => 04-01-2014 [value] => 20 [value] => 33 

Как я могу сделать это эффективно в несколько простых шагов? В противном случае я бы просто создал результат для ID 1 и ID 2 или дважды выполнил свою функцию в полном массиве.

+0

я предполагаю, что вы используете 'ID' как' датчика ID 'if then then используйте' Join' в вашем запросе для 'Join' этой таблицы с самим собой и сохраните результаты в массиве –

+0

@NaveedYousaf 'ID' является первичным ключом самого сенсора данных sensorID - это связанный идентификатор с датчиком в моем DB. Так что я могу присоединиться к таблице сам по себе? Также мне нужно что-то вроде «null» для значения, если значение отсутствует в определенную дату для «sensorID». – Madmenyo

+0

Просто 'SELECT *' и заполнить массив в php: 'foreach $ row, $ result [$ row ['date']] [$ row ['sensorID']] = $ row ['value']' – georg

ответ

1

Просто получить все данные в один прогон и построить массив в PHP:

// do the mysql query stuff >> $result (array of all rows in db) 
$data = array(); 
foreach ($result AS $row) { 
    if (!isset($data[$row['date']])) { 
    $data[$row['date']] = array('sensor1' => null, 'sensor2' => null); 
    } 
    $data[$row['date']]['sensor' . $row['sensorID']] = $row['value']; 
} 

Результат будет что-то вроде

$data = array(
    '01-01-2014' => array('sensor1' => 50, 'sensor2' => 60), 
    '02-01-2014' => array('sensor1' => 20, 'sensor2' => 30), 
    '03-01-2014' => array('sensor1' => null, 'sensor2' => 55), 
    '04-01-2014' => array('sensor1' => 20, 'sensor2' => 33) 
); 
+0

Я, возможно, устал, но я не могу получить цикл этого массива и получить как значения, так и дату, связанную со значениями. дата является ключом массива, но если я 'foreach ($ data as $ d)', я не могу получить ключ ($ d). Я могу просто вывести значения. – Madmenyo

+0

Nevermind, я просто устал :), Спасибо, что это сработало как шарм. – Madmenyo

Смежные вопросы