Привет всем! Не получается сделать запрос в базу данных. По заданию необходимо получить данные (и вывести их в таблицу, но это другой код уже) о задолженности студентов. Предполагается, что если студент в этом месяце не платил (неважно в какой день до текущей даты), то он считается должником. Имеется такой код: PHP: $currentDate = date("Y-m-d"); $link = mysqli_connect($host, $user, $password, $database) or die("Ошибка " . mysqli_error($link)); $query = 'SELECT ID_payment, Date_payment, FIO_student FROM payment INNER JOIN student ON (payment.ID_student = student.ID_student) WHERE Date_payment < '.$currentDate.' ORDER BY ID_payment'; $result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link)); $data = mysqli_fetch_all($result, MYSQLI_ASSOC); print_r($data); В прикрепленном файле скриншот записей таблицы в бд. Как сделать запрос, чтобы учитывался только год и номер месяца (то есть чтобы студент, не оплативший в этом месяце, считался должником)?
PHP: $query="SELECT ID_payment, Date_payment, FIO_student FROM payment INNER JOIN student ON (payment.ID_student = student.ID_student) WHERE date_format(Date_payment, '%Y%m') < date_format(now(), '%Y%m') ORDER BY ID_payment";
спасибо, помогло продвинуться в этом вопросе, но не глобально в задаче. Помогите, пожалуйста, сделать сформировать запрос, который выводил бы то, что нужно в задании. Я сейчас сам попробовал, но, честно говоря, мучаюсь над этим уже не первый день и просто потерялся в своем же коде. Нужно получить отчет о задолженности студентов заданного факультета за заданный курс обучения (эти два выбора потом я добавлю через select в форме, а пока просто самому в запросе менять): ФИО студента, группа, сумма начислений, задолженность по оплате (пока пустым оставим).
PHP: $query= "SELECT ID_student, FIO_student, group_name, SUM(Total_summ) as Total_pay FROM student INNER JOIN study_group ON (student.ID_group = study_group.ID_group) INNER JOIN payment ON (student.ID_student = payment.ID_student)"; Решил попробовать идти дальше, надо добавить сумму начислений. Выдает ошибку: Column 'ID_student' in field list is ambiguous. В чем проблема?
Исправил на PHP: $query= "SELECT FIO_student, group_name, SUM(Total_summ) as Total_pay FROM student INNER JOIN study_group ON (student.ID_group = study_group.ID_group) INNER JOIN payment ON (student.ID_student = payment.ID_student)"; Вот что выдает. Значит, я запрос неверно написал. У каждого студента в таблице payment есть оплата за каждый месяц. Как суммировать ВСЕ оплаты у каждого конкретного студента? И почему выводит лишь одного студента?
Доброго времени суток и с наступающим Новым годом! Подскажите пожалуйста в чем проблема. Создал свою первую базу данных (имя calcgm), состоящую из одной таблицы diagnostik на локальном сервере. Цель архивировать входные данные онлайн-калькулятора, вводимых различными пользователями, для дальнейшего анализа. Таблица содержит столбцы: idtab, ipadr, data_time, h1, b1, h2, b2, pl, fl, bm, sol idtab - первичный ключ с автоинкриментом (mediumint(8) unsigned); ipadr - ip адрес пользователя (varchar(50)); data_time - дата время (timestamp on update current_timestamp()); h1, b1, h2, b2, pl, fl, bm, sol - различные числовые данные в формате с плавающей запятой. Код скомбинировал из различных примеров Код (Text): <?php // Получить IP клиента в $ip_adr $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = @$_SERVER['REMOTE_ADDR']; if(filter_var($client, FILTER_VALIDATE_IP)) $ip_adr = $client; elseif(filter_var($forward, FILTER_VALIDATE_IP)) $ip_adr = $forward; else $ip_adr = $remote; // Тело калькулятора ... // Подключение к базе данных и запись if(@$link = mysqli_connect('localhost','root','','calcgm')) { echo 'Подключение успешно установлено'; // Выполняем работу с базой данных $sql = mysqli_query($link, "INSERT INTO `diagnostik` (`idtab`,`ipadr`,`data_time`,`h1`,`b1`,`h2`,`b2`,`pl`,`fl`,`bm`,`sol`) VALUES (NULL,`$ip_adr`,NULL,`$h1`,`$b1`,`$h2`,`$b2`,`$ploss`,`$floss`,`$bm`,`$hc`)"); //Если вставка прошла успешно if ($sql) { echo '<p>Данные успешно добавлены в таблицу.</p>'; } else { echo '<p>Произошла ошибка: ' . mysqli_error($link) . '</p>'; } mysqli_close($link); // Закрываем соединение } else { echo 'Не удалось установить соединение к базе данных:<br>'; echo 'ошибка ('.mysqli_connect_errno().') '; echo mysqli_connect_error(); } ?> При запуске скрипта возникает диагностическое сообщение: Произошла ошибка: Unknown column '127.0.0.1' in 'field list' Где эта колонка с именем '127.0.0.1' ума не приложу. Думал, что возможно какие-то имена колонок совпадают с неким служебным словом. Покрутил имена не помогло. Просмотрел код, ошибок не заметил...
@eleks, заключи значения в обычные апострофы или кавычки. --- Добавлено --- И попроси модеров создать для тебе отдельную тему. И больше не поднимай чужие, не самые свежие, темы своими вопросами. --- Добавлено --- Прикол с mediumint не понял. Байты экономишь? И макс. длина IPv4 – 15 символов
Спасибо! Это сработало. Намутили с этими апострофами. Порой трудно их отличить от кавычек, особенно листая печатные издания. Да. Длина одной записи получилась слишком большой и лет эдак через 600, эта таблица полностью исчерпает доступное дисковое пространство. Пусть лучше через 40 лет возникнет ошибка записи из-за переполнения mediumint Отлично! Значить время жизни можно увеличить