PHP, в то время как l oop + foreach на той же странице удваивает результат - PullRequest
0 голосов
/ 30 марта 2020

Я создаю информационную панель для статистики, где я хочу отображать график и таблицу с одинаковыми результатами. Для отображения дат и единиц измерения я использую запрос MySQLi и foreach для каждого «периода» времени (1 месяц, 3 месяца, 1 год). Когда вызывается запрос 'date' один раз, это прекрасно отображает все единицы, но когда я использую запрос в другой раз, foreach будет удваивать вывод единиц каждый раз, используя один и тот же запрос 'date'.

Я применил следующий код, чтобы получить даты:

/* GET DATES FROM AVAILABLE IN DB AND FOREACH THEM */

  $sql = "SELECT `datetime` 
          FROM `Subscriptions_raw` 
          WHERE ".$getStartPlusEnd." 
          GROUP BY `datetime`";
    $result = $mysqli->query($sql);

  // initialize $saved here
      $result = $mysqli->query($sql);
      //$saved = []; - no need of this now


  if (mysqli_num_rows($result) > 0) {
      while ($row = mysqli_fetch_assoc($result)) {

        $input = $row["datetime"];
        $date = strtotime($input);

        echo '<th scope="col">'.date('d M', $date).'</th>';

        $filterDates[] = $row["datetime"];
        }


  }

Я применил следующий код, чтобы получить единицы по 1 месяцу в день:

/* GET 1 MONTH NEW */

foreach (($filterDates) as &$sqlDate) {

    $sql = "SELECT `datetime`, `period`, `units` , SUM(`Units`) AS 'units' 
            FROM `Subscriptions_raw` 
            WHERE NOT `proceedsReason` =  'Rate After One Year' 
            AND `subscription` = 'New' 
            AND `datetime` LIKE '%".$sqlDate."%' 
            AND `period` = '1 Month' 
            GROUP BY `datetime`";
    $result = $mysqli->query($sql);

    for ($set = array (); $row = $result->fetch_assoc(); $set[] = $row);
        echo "<td class='align-middle'>".$set[0]["units"]."</td>";
    }

Пример (рабочий):

[TABLE WITH DATES QUERY]
[UNITS 1 MONTH PER DAY]

[UNITS 3 MONTHS PER DAY]

[UNITS 1 YEAR PER DAY]

Пример (НЕ работает):

[TABLE WITH DATES QUERY]
[UNITS 1 MONTH PER DAY]

[TABLE WITH DATES QUERY]
[UNITS 3 MONTHS PER DAY][UNITS 3 MONTHS PER DAY]

[TABLE WITH DATES QUERY]
[UNITS 1 YEAR PER DAY][UNITS 1 YEAR PER DAY][UNITS 1 YEAR PER DAY]

Пример того, чего я пытаюсь достичь:

[TABLE WITH DATES QUERY]
[UNITS 1 MONTH PER DAY]

[TABLE WITH DATES QUERY]
[UNITS 3 MONTHS PER DAY]

[TABLE WITH DATES QUERY]
[UNITS 1 YEAR PER DAY]

1 Ответ

0 голосов
/ 30 марта 2020

Найдена проблема, я не должен снова запрашивать '$filterDates[] = $row["datetime"];'. Поскольку он был загружен снова, он дважды запросил filterDates.

...