Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
6 / 6 / 1
Регистрация: 19.12.2013
Сообщений: 160

Формирование таблицы

18.05.2016, 00:22. Показов 928. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.
Подскажите как сформировать таблицу:
1. нужно сформировать из дат (получаем из бд) шапку
2. вывести учеников и их отметки

Запрос:
SQL
1
SELECT *, st.date AS date_mark FROM student s LEFT JOIN student_mark st ON (st.id_student=s.id_student)
Обработка:
PHP
1
2
3
    while($row=getRow($result)){
        $data[$row['date']][$row['name']][] = array('idtm' => $row['id_student_mark'], 'mark' => $row['mark']);
    }
Вывод:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<table>
            <?php 
            $students=getStudents();
            echo '<tr>';
            foreach ($students as $date => $student) {
                echo '<th>'.$date.'</th>';
                foreach ($student as $name => $marks) {
                        echo '<td>'.$name.'</td>';
                        foreach ($marks as $mark) { 
                        echo '<td>'.$mark['mark'].'</td>';
                    }
 
                }
            }
            echo '</tr>';
            ?>
</table>
Вот что примерно получается:


а нужно:
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.05.2016, 00:22
Ответы с готовыми решениями:

Формирование таблицы
Имеются 2 таблицы: users - игроки ( из нее берется столбец login) igri - сыгранные игры (в ней столбцы: ID_igri, k1 (id 1-ой команды),...

Формирование таблицы в mPdf
Доброго времени суток! Может кто-то сталкивался с библиотекой mPdf, подскажите как реализовать: выводится таблица на несколько страниц,...

Формирование таблицы из списка
Всем привет. Имеется список разделов - х, в большинстве разделов имеются подразделы - y но есть разделы и без подразделов. Список...

17
44 / 40 / 13
Регистрация: 08.05.2016
Сообщений: 167
18.05.2016, 10:10
Было бы наверное проще, если бы поля других учеников, не получивших оценку, тоже как-то заполнялись. Тогда можно было бы сделать два запроса, один на вывод всех дат, а другой в цикле бы выводил в строку все отметки учеников.
1
6 / 6 / 1
Регистрация: 19.12.2013
Сообщений: 160
18.05.2016, 10:40  [ТС]
Бред, допустим на занятии 1 ученик получил отметку, и 24 строки (ученика) с нулями? Как же оптимизация бд?)
0
44 / 40 / 13
Регистрация: 08.05.2016
Сообщений: 167
18.05.2016, 10:57
Почему сразу бред, я как вариант предложил, откуда я знаю сколько там учеников, может у вас кружок и ходит три человека). И почему с нулями, дату можно поставить, за место оценки что-то по умолчанию.
1
6 / 6 / 1
Регистрация: 19.12.2013
Сообщений: 160
18.05.2016, 11:06  [ТС]
Имхо, но это неправильное формирование хранения данных)
0
44 / 40 / 13
Регистрация: 08.05.2016
Сообщений: 167
18.05.2016, 12:40
Как хоть таблицы то выглядят, было бы проще ориентироваться

Добавлено через 1 минуту
Вы сделайте скрины таблиц что ли, может кто-то быстрее решение предложит

Добавлено через 1 час 32 минуты
Какие хоть поля и в каких таблицах
1
6 / 6 / 1
Регистрация: 19.12.2013
Сообщений: 160
18.05.2016, 12:45  [ТС]
student:
- id_student
- username
- password
- name
- id_group

student_mark:
- id_student_mark
- id_student
- date
- mark
0
44 / 40 / 13
Регистрация: 08.05.2016
Сообщений: 167
18.05.2016, 14:04
от вариант, если student содержит имя и id, а student_mark - id, date (у меня Dates) и mark. У меня работает так, выводит для каждой даты когда кому-либо ставилась оценка, список всех учеников, если отметка есть, то поле не пустое имеет цифру, если нет то пустое. Выводит всех учеников, даже тех, которые не получали отметки. Вам останется только в цикле проработать и вывести данные. Поля которые вам нужны можете добавить в SELECT, чтобы лишнего не оказалось.
SQL
1
2
3
4
SELECT *, ts.Dates, ts.(Поле имя) FROM (SELECT Dates, student.id, student.(Поле имя)
FROM student_mark, student
GROUP BY Dates, student.id) AS ts LEFT JOIN student_mark ON student_mark.id = ts.id AND student_mark.Dates = ts.Dates
ORDER BY ts.Dates, ts.(Поле имя)
Добавлено через 6 минут
Если например три студента, то будет три строки, сколько дат столько и столбцов, надо будет только как-то по ключам из массива выбрать значения, чтобы записать их строками.

Добавлено через 14 минут
Julieta получается?)

Добавлено через 7 минут
Допустим, я знаю, что есть четыре студента, чтобы вывести его оценки в строку мне надо к ключу массива прибавить 4 и повторять столько раз сколько дат в таблице. Чё не правильно всё)?

Добавлено через 39 минут
А в ответ тишина)
1
6 / 6 / 1
Регистрация: 19.12.2013
Сообщений: 160
18.05.2016, 14:43  [ТС]
DenMagor, секунду, другой способ пробую))
Заранее спасибо.

Добавлено через 26 минут
DenMagor, что-то я не поняла как Ваш запрос формируется)
0
44 / 40 / 13
Регистрация: 08.05.2016
Сообщений: 167
18.05.2016, 14:50
Во вложенном запросе формируются все возможные комбинации для каждой даты, т.е. для первой даты выбираются все студенты, так и для следующих, получается таблица в которой на каждую дату есть весь список учеников, дальше JOINом вы соединяются две таблицы, одна вложенная, вторая с отметками, если есть совпадения, то в строке с датой и именем ученика поле оценка заполнена, если нет то пустое, остаётся только вывести запрос из базы в массив и с ним уже работать, и него же можно взять и даты для первой строки таблицы. Старался объяснить, не знаю понятно-ли.
0
44 / 40 / 13
Регистрация: 08.05.2016
Сообщений: 167
18.05.2016, 14:55

Вот к примеру 2016-05-16 00:00:00 отметку получил только Иван, поэтому поле number у него заполнено у остальных пустое
1
6 / 6 / 1
Регистрация: 19.12.2013
Сообщений: 160
18.05.2016, 14:56  [ТС]
Вечером буду пытаться) Спасибо)
0
44 / 40 / 13
Регистрация: 08.05.2016
Сообщений: 167
18.05.2016, 14:57
Если надо будет, ещё раз объясню, вывести данные в таблицу думаю не составит большого труда
0
44 / 40 / 13
Регистрация: 08.05.2016
Сообщений: 167
18.05.2016, 15:11
Вот скрины моих таблиц. Это вместо student_mark поле name здесь можно в счёт не брать

Это вместо student тут только два необходимых столбца
0
44 / 40 / 13
Регистрация: 08.05.2016
Сообщений: 167
18.05.2016, 16:40
Вот пример моего кода по выводу данных в таблицу, приводил примерно и на скорую руку
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
while ($arr = mysql_fetch_assoc($cat))
{
    $arrays[]=$arr;
}
 
//Количество студентов
$num = 4;
//Количество дат полученное делением количества значений массива на количество учеников
$num_arr = count($arrays)/$num;
 
echo "<table width=100% height=100% border=\"1\">";
 
echo "<tr outline: 2px solid #000; align=center>";
echo "<td outline: 2px solid #000;>Имя</td>";
//Выбераем все даты в цикле и помещаем их первую строку таблицы
        for ($s=0; $s<count($arrays); $s=$s+4)
        {
        echo "<td>".$arrays[$s]['Dates']."</td>";
        }
        echo "</tr>";
//переменная $J это номер строки        
for ($j = 0; $j<($num); $j++)
{
    echo "<tr align=center>";
    //В первый столбец записываем имя
    echo "<td >".$arrays[$j]['name']."</td>";
    
    //В этом цикле вставляем значения в столбцов строки $j
    for ($i=0; $i <($num_arr); $i++)
    {
        $val = $j+($i*4);
        //Если значение пустое оно не выводится
        echo "<td >".$arrays[$val]['number']."</td>";
    }
    echo "</tr>";
}
echo "</table>";
1
44 / 40 / 13
Регистрация: 08.05.2016
Сообщений: 167
18.05.2016, 16:41
И вот как вывел
1
6 / 6 / 1
Регистрация: 19.12.2013
Сообщений: 160
18.05.2016, 17:38  [ТС]
Спасибо! Попробую
0
44 / 40 / 13
Регистрация: 08.05.2016
Сообщений: 167
18.05.2016, 17:54
Пожалуйста, если что-то непонятно в этом коде спрашивайте
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.05.2016, 17:54
Помогаю со студенческими работами здесь

Формирование таблицы
привет всем нужна помощь есть таблица, навзания строк, столбцы с данными нужно перестроить таблицу, например есть 7 столбцов, с...

Формирование таблицы
Ребят очень нужна помощь... У меня есть таблица &quot;Расписание занятий&quot;, показанной на рисунке 1. мне нужно сделать что бы не так...

Формирование таблицы
В моей программе формируется таблица из БД, всё хорошо. Но при выгрузке в Ексель нехватает одного столбца (12 столбца). Подозреваю, что...

Формирование таблицы
Доброе утро. Подскажите как должен выглядеть код. Нужно макросом - нарисовать таблицу по текстовому коду: ...

Формирование сводной таблицы
День добрый. Подскажите в какую сторону копать: У меня есть такая таблица: ComputerName|Prog|Version Comp01|Prog1|1.0 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru