Вы всегда должны использовать циклы foreach, как показано ниже:
$subjects = $query->result();
foreach ($subjects as $subject)
Ваш подход имеет плохую производительность.
И, возможно, это уже решает вашу проблему - я не мог проверить это прямо сейчас.Ваши переменные запроса имеют одинаковые имена, и вы используете $ query в обоих циклах foreach - это может привести к некоторому странному поведению.