Я хотел бы получить результат из 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>";
}
По мере получения результатов запроса, сборка два массивы, один со всеми элементами, а другой, сгруппированный по дате, со значениями для любых элементов, имеющих записи для каждой даты.
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";
}
}
Этот вывод не будет аккуратно отформатирован, но я точно не знаю, как вы планируете его выводить, поэтому я оставлю это на ваше усмотрение.
Других решений пока нет …