Преобразовать строки из результата SQL в столбцы в массиве

Я хотел бы получить результат из SQL, который выглядит следующим образом

id    name    kg     date
1     ABC     3      2017-09-14
1     ABC     2      2017-09-15
2     DEF     2      2017-09-14
2     DEF     5      2017-09-15
2     DEF     5      2017-09-16
2     DEF     3      2017-09-17
3     GHI     3      2017-09-15
3     GHI     6      2017-09-17

И поместите его в массив (или что-то еще, что я могу пройти через), чтобы это выглядело так

id    name    2017-09-10    2017-09-11    2017-09-12    2017-09-13    2017-09-14    2017-09-15    2017-09-16    2017-09-17
1     ABC     3 kg          2 kg
2     DEF     2 kg          5 kg          5 kg          3 kg
3     GHI                   3 kg                        6 kg

Он будет содержать только даты с последнего воскресенья до этого воскресенья (активной недели).

Я не работал с массивами раньше, но из того, что я прочитал до сих пор, я думаю, что мне нужно создать массив внутри другого массива, чтобы достичь этого? Я думаю, что из результата SQL я буду проходить через каждую строку и помещать значения в правую строку в зависимости от того, существует ли уже идентификатор. Один идентификатор может иметь только уникальные даты.

while ($row = odbc_fetch_row($resultSQL)){
Create an array with the columns above and push the result from the SQl
into the array on a new row or an existing column if the ID is
already in the array.
}

У кого-нибудь есть идеи как этого добиться? Благодарю.

РЕДАКТИРОВАТЬ:

Решение: теперь я сделал так, что добился желаемого результата.

//create two arrays
$items=array();
$dates=array();

//loop through the SQL result and put it into the arrays
while ($row = odbc_fetch_row($resultSQL)){
$ITEMNO=odbc_result($resultSQL,"id");
$ITEMNAME=odbc_result($resultSQL,"name");
$RecQtyDay=odbc_result($resultSQL,"kg");

$items[$ITEMNO] = $ITEMNAME;
$dates[$REGDATE][$ITEMNO] = $RecQtyDay;
}

//sort the dates array
ksort($dates);

//loop through and print out dates array within the item array
foreach ($items as $ITEMNO => $ITEMNAME) {
echo "$ITEMNO $ITEMNAME ";
foreach ($dates as $REGDATE => $values) {
if (isset($values[$ITEMNO])) echo "$REGDATE $values[$ITEMNO]";
}
echo"<BR>";
}

0

Решение

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

while ($row = odbc_fetch_row($resultSQL)) {
$items[$row['id']] = $row['name'];
$dates[$row['date']][$row['id']] = $row['kg'];
}

Сортировать массив дат / значений по ключу (date)

ksort($dates);

Затем зациклите массив элементов, чтобы сгенерировать строки. В каждой строке переберите массив дат и выведите значение для этого идентификатора и даты.

foreach ($items as $id => $name) {
echo "$id   $name";
foreach ($dates as $date => $values) {
if (isset($values[$id])) echo "$value kg";
}
}

Этот вывод не будет аккуратно отформатирован, но я точно не знаю, как вы планируете его выводить, поэтому я оставлю это на ваше усмотрение.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]