Может ли цикл строк SQL только один раз? - PullRequest
0 голосов
/ 30 сентября 2018

Я не знаю, как сохранить это выполненным.Код внутри // CALCULATE EACH MONTH выполняется только в первом цикле tracks.

У меня есть идея, что мне нужно сохранить результат SQL в массиве?но я действительно не могу заставить его работать.

Мой код php:

$conn = new mysqli($servername, $username, $password, $dbname);
$monthsQuery = "SELECT DISTINCT YEAR(`Reporting Date`) AS `Year`, MONTH(`Reporting Date`) AS `Month` FROM tsv ORDER BY `Reporting Date`";
$monthsResult = $conn->query($monthsQuery);


if(isset($_POST['submit'])) {
    $tracks = $_POST['track'];
    $albums = $_POST['album'];
    foreach($tracks as $track) {
        echo "Partof:" . $track['partof'] . "<br>"; 
        echo "percentage:" . $track['percentage'] . "<br>";
        // CALCULATE EACH MONTH
        if ($monthsResult->num_rows > 0) {
            // output data of each row
            $i = 0;
            while($monthRow = $monthsResult->fetch_assoc()) {
                $monthNum  = $monthRow["Month"];
                $dateObj   = DateTime::createFromFormat('!m', $monthNum);
                $monthName = $dateObj->format('F'); // March
                echo $monthRow["Year"] . " " . $monthName . "<br>";
                $i++;
            }
        } else {
            echo "0 results";
        }
        //END MONTH CALCULATION

1 Ответ

0 голосов
/ 30 сентября 2018

Я бы порекомендовал сделать это, прочитав все строки и сохранив их в массив перед циклом foreach:

if(isset($_POST['submit'])) {
    $tracks = $_POST['track'];
    $albums = $_POST['album'];
    $monthRows = array();

    if ($monthsResult->num_rows > 0) {
            // output data of each row
            $i = 0;
            while($monthRow = $monthsResult->fetch_assoc()) {
              $monthRows[] = $monthRow;
            }
    foreach($tracks as $track) {
        echo "Partof:" . $track['partof'] . "<br>"; 
        echo "percentage:" . $track['percentage'] . "<br>";
        // CALCULATE EACH MONTH
        if (count($monthRows) > 0) {
            // output data of each row
            $i = 0;
            foreach($monthRows as $monthRow) {
                $monthNum  = $monthRow["Month"];
                $dateObj   = DateTime::createFromFormat('!m', $monthNum);
                $monthName = $dateObj->format('F'); // March
                echo $monthRow["Year"] . " " . $monthName . "<br>";
                $i++;
            }
        } else {
            echo "0 results";
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...