ВЫБЕРИТЕ maxAmount ОТ действий - ВЫБЕРИТЕ СЧЕТ (деятельность) ОТ регистраций? - PullRequest
0 голосов
/ 09 июня 2018

Я работаю над проектом, который я получил из школы, но сейчас у меня возникла проблема.У меня есть два запроса:

$sql = 'SELECT Amount FROM activities ORDER BY Id ASC';

и:

$select = 'SELECT COUNT(Activity) as Activity 
           FROM `registrations` 
           INNER JOIN activities 
                ON registrations.Activity = activities.Name 
           WHERE registrations.Activity='.$row['Name'].' 
                AND registrations.Morning/Afternoon='.$row['Morning/Afternoon'].'';

Итак, что должно произойти, это сумма из запроса $ sql - COUNT (Activity) из запроса $ select.

Пока что я получил это, но оно не работает так, как я хочу, чтобы оно работало:

<?php

$sql = 'SELECT * FROM activities ORDER BY Id ASC';
foreach ($db->query($sql) as $row) {
    $select = 'SELECT COUNT(Activity) as Activity 
               FROM `registrations` 
               INNER JOIN activities 
                  ON registrations.Activity = activities.Name 
               WHERE registrations.Activity=' . $row['Name'] . ' 
                  AND registrations.Morning/Afternoon=' . $row['Morning/Afternoon'] . '';

    foreach ((array)$select as $select2) {
        $maxAantal = $row['Amount'] - $select2['Activity'];
    }

    echo '<tr>';
    echo '<td>' . $row['Name'] . '</td>';
    echo '<td>' . $row['Location'] . '</td>';
    echo '<td>' . $row['Begintime'] . '</td>';
    echo '<td>' . $row['Endtime'] . '</td>';
    echo '<td>' . $maxAmount . '</td>';
    echo '<td>' . $row['Deadline'] . '</td>';
    echo '<td>' . $row['Morning/Afternoon'] . '</td>';
    echo '<td>';
    echo '<a class="btn btn-secondary" href="readActi.php?id=' . $row['Id'] . '">Read</a>';
    echo '</td>';
    echo '</tr>';
}

$_SESSION['Id'] = $row['Id'];

?>

Но оно дает мне это предупреждение

Warning: Illegal string offset 'Activity'

иЯ не могу понять, как это исправить

Ответы [ 2 ]

0 голосов
/ 09 июня 2018
<?php

$sql = 'SELECT * FROM activities ORDER BY Id ASC';
if ($db->query($sql)) {
    foreach ($db->query($sql)->fetchAll(PDO::FETCH_ASSOC) as $row) {
        $select = 'SELECT COUNT(Activity) as Activity 
                   FROM `registrations` 
                   INNER JOIN activities 
                      ON registrations.Activity = activities.Name 
                   WHERE registrations.Activity=' . $row['Name'] . ' 
                      AND registrations.Morning/Afternoon=' . $row['Morning/Afternoon'] . '';
        if ($db->query($select)) {
        foreach ($db->query($select)->fetchAll(PDO::FETCH_ASSOC) as $select2) {
            $maxAantal = $row['Amount'] - $select2['Activity'];
        }

        echo '<tr>';
        echo '<td>' . $row['Name'] . '</td>';
        echo '<td>' . $row['Location'] . '</td>';
        echo '<td>' . $row['Begintime'] . '</td>';
        echo '<td>' . $row['Endtime'] . '</td>';
        echo '<td>' . $maxAmount . '</td>';
        echo '<td>' . $row['Deadline'] . '</td>';
        echo '<td>' . $row['Morning/Afternoon'] . '</td>';
        echo '<td>';
        echo '<a class="btn btn-secondary" href="readActi.php?id=' . $row['Id'] . '">Read</a>';
        echo '</td>';
        echo '</tr>';
        }
    }
}

$_SESSION['Id'] = $row['Id'];

?>

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

Из этого:

foreach ($ db-> query ($ sql) как $ row) {

Для этого:

foreach ($ db-> query($ sql) -> fetchAll (PDO :: FETCH_ASSOC) как $ row) {


Тогда это:

foreach ((массив) $ выберите как$ select2) {

На это:

foreach ($ db-> query ($ select) -> fetchAll (PDO :: FETCH_ASSOC) как $ select2) {

РЕДАКТИРОВАТЬ: ДЛЯ БУЛЕВСКОЙ ПРОБЛЕМЫ, ПРОСТО ДОБАВЬТЕ ЕСЛИ ЗАЯВЛЕНИЕ В КАЖДОМ ЗАЯВЛЕНИИ ЗА КАЖДОМ, ПОСМОТРЕТЬ КОД ВЫШЕ

0 голосов
/ 09 июня 2018

Ваш второй запрос $select не выполнен и не извлечен, а задан только в переменной $select ... Вы просто забыли запросить и извлечь его, поэтому $select2['Activity'] не установлен.

Проверьте ваш второй foreach, я полагаю, это должно быть foreach ($db->query($select) as $select2)

РЕДАКТИРОВАТЬ с точностью

В вашем коде у вас есть:

$select = 'SELECT COUNT(Activity) as Activity 
           FROM `registrations` 
           INNER JOIN activities 
              ON registrations.Activity = activities.Name 
           WHERE registrations.Activity=' . $row['Name'] . ' 
              AND registrations.Morning/Afternoon=' . $row['Morning/Afternoon'] . '';

затем

foreach($select as $select2)

Здесь $select - строка, содержащая ваш запрос.Сделав для него foreach, вы просто получите все символы строки один за другим, и индекс ['activity'] не будет существовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...