powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Формирование таблицы наподобие классного журнала.
6 сообщений из 6, страница 1 из 1
Формирование таблицы наподобие классного журнала.
    #38541260
matematik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток! Имеется очень маленькая база данных состоящая из следующих таблиц: уроки (id_urok, дата, предмет), студенты (id_stud, фамилия), оценки (id, id_urok, id_stud, оценка). Как создать запрос, который формирует таблицу, в которой в первом столбце содержится список всех студентов, а во втором и последующих столбцах все оценки студента по данному предмету? В заголовке столбцов, содержащих оценки должна стоять дата урока.

Пробовал так:

<?php
$mysql = mysql_connect('localhost', 'root');
$selected = mysql_select_db('base');
$query = "SELECT student.fam, lesson.data_les, ocenka.ocenka
FROM student, lesson, ocenka
WHERE ocenka.id_urok = lesson.id_urok and ocenka.id_stud = student.id_stud and lesson.predm = 'математика'";
$result = mysql_query($query);

$query2 = "SELECT * FROM student";
$result2 = mysql_query($query2);
while ($row = mysql_fetch_assoc($result)) $data[] = $row;
?>
<table border="1">
<?php
while ($row = mysql_fetch_assoc($result2)) {
echo "<tr><td>".$row['fam']."</td>";
foreach ($data as $item):
echo "<td>".$item['ocenka']."</td>";
endforeach;
echo "</tr>";
}
?>

Но в каждой строке таблицы выводятся все оценки всех студентов.
...
Рейтинг: 0 / 0
Формирование таблицы наподобие классного журнала.
    #38541272
Aleksandr Kuzminsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
matematik,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
$query = "SELECT 
    student.fam, 
    lesson.data_les, 
    ocenka.ocenka 
FROM student
  LEFT JOIN ocenka ON ocenka.id_stud = student.id_stud
  LEFT JOIN lesson ON lesson.id_urok = ocenka.id_urok
WHERE  lesson.predm = 'математика'";

$result = mysql_query($query);

while ($row = mysql_fetch_assoc($result)){ 
   $matrix[$row["fam"]][$row["data_les"]] = $row["ocenka"];
}



Дальше напечатать эту матрицу. Как-то так.
...
Рейтинг: 0 / 0
Формирование таблицы наподобие классного журнала.
    #38541377
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
matematikДоброго времени суток! Имеется очень маленькая база данных состоящая из следующих таблиц: уроки (id_urok, дата, предмет), студенты (id_stud, фамилия), оценки (id, id_urok, id_stud, оценка). Как создать запрос, который формирует таблицу, в которой в первом столбце содержится список всех студентов, а во втором и последующих столбцах все оценки студента по данному предмету? В заголовке столбцов, содержащих оценки должна стоять дата урока.
.

это очень хороший пример того, какие запросы писать НЕ надо.
...
Рейтинг: 0 / 0
Формирование таблицы наподобие классного журнала.
    #38541628
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
matematik,

Все висит на оценках - с них и начинайте.
...
Рейтинг: 0 / 0
Формирование таблицы наподобие классного журнала.
    #38541650
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
matematik...уроки (id_urok, дата, предмет), студенты (id_stud, фамилия), оценки (id, id_urok, id_stud, оценка). Как создать запрос, который формирует таблицу, в которой в первом столбце содержится список всех студентов, а во втором и последующих столбцах все оценки студента по данному предмету? В заголовке столбцов, содержащих оценки должна стоять дата урока.

Количество студентов (строк) слева будет равно произведению количества уроков и оценок справа.

Фамилия предм оц
-------------------
Иванов математика 5
Иванов математика 2
Иванов математика 3
Иванов русский 1
Иванов русский 5
...

и так далее.

ТЗ в цитате говорит ниочем.

Варианты group_concat() ... group by ... having могут дать такой вид

Фамилия предм оц
-------------------
Иванов математика 5, 2, 3
Иванов русский 1, 5

Или такой

Фамилия предм оц
--------------------
Иванов математика 5,2,3; русский 1,5

Если по одному предмету см первый. Если вообще за урок - без вариантов
...
Рейтинг: 0 / 0
Формирование таблицы наподобие классного журнала.
    #38541687
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос на все:

Код: sql
1.
2.
3.
select * from otsenki
right join urok using(id_urok)
right join stud using(id_stud)



От него танцуйте остальные варианты

right join по идее покажет именно всех студентов, в том числе которые систематически прогуливали и остались без оценок по тому или иному предмету. Без right (left) список включит только студентов с оценками.

Например запрос ниже должен вернуть список студов по предметам и всеми оценками через запятую в отдельном поле vals:

Код: sql
1.
2.
3.
4.
select stud.fam, urok.title, group_concat(', ', otsenki.values) as vals from otsenki
join urok using(id_urok)
join stud using(id_stud)
group by id_stud



По предмету

Код: sql
1.
2.
3.
4.
5.
select stud.fam, urok.title, group_concat(', ', otsenki.values) as vals from otsenki
join urok using(id_urok)
join stud using(id_stud)
where id_urok = $id_urok 
group by id_stud



Или в джойне

Код: sql
1.
2.
3.
4.
select stud.fam, urok.title, group_concat(', ', otsenki.values) as vals from otsenki
join urok on urok.id_urok = otsenki.id_urok and urok.id_urok = $id_urok
join stud using(id_stud)
group by id_stud



Ну и тд
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Формирование таблицы наподобие классного журнала.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]