Абажур
Был опыт работы только со статическим html или использованием готовых движков, типа Joomla. Требуется сделать динамическую страницу с переменными данными из мини БД с перечнем пользователей и историей по нескольким численными показателям.
Таблица “history”
— Id: INT (PK);
— user: varchar (40) (FK);
— history_date: date;
— pokazatelj1: INT;
— pokazatelj2: INT;
— pokazatelj3: INT.Вопросы:
1. Каким образом лучше генерировать текущие максимальные значения показателей в таблице на сайте на текущую дату (history_date), чтобы пользователь сайта мог самостоятельно осуществлять сортировку выводимых записей по одному из трех показателей (pokazateljN БД) нажатием по заголовку поля таблицы.
2. При росте числа записей в таблице истории (кол-ве пользователей), будет ли генерация web-страницы (таблицы), во-первых, загружать БД запросами, и во-вторых, как следствие – увеличивать скорость формирования страницы? Есть ли смысл создавать какие-то промежуточные таблицы в БД для хранения готовых уже отсортированных значений конкретных показателей на определенный момент времени (history_date)?
Drunkenmunky
С помощью параметра ORDER BY в SQL-запросе
Если в нужных колонках правильно установлены индексы, то нет.
Абажур
Спасибо. Я думаю, для тех кто работает с PHP, моя задача относятся к самым простым, тривиальным операциям. Но все же можете порекомендовать те функции, ключевые темы, слова… PHP, с которым мне нужно ознакомиться для выполнения следующих операций:
— реализация активных ссылок названий полей таблицы с целью сортировки выводимых записей таблицы;
— процесс выборки данных из БД и генерация непосредственно html-кода таблицы страницы.
Drunkenmunky
Ну, для понимания принципа достаточно посмотреть как это работает в phpMyAdmin
Вот например:
https://www.php.net/manual/ru/mysqli.quickstart.statements.php
Не лишней будет https://www.php.net/manual/ru/function.printf.php
Абажур
Спасибо огромное! Буду смотреть, разбираться.
miketomlin
Как вариант: https://gency.ru/comment/84
Для выборки по конкретным датам можно использовать второй компонент пути, например /sort-by-pokazatelj1/2021-03-30Объем страницы не должен неограниченно расти. Если есть риск этого, нужно применить пагинацию. Типичный вариант пагинации описан там же в статье. Есть и более эффективные варианты, например по той же дате.
Как я понял, user – внешний ключ (почему varchar?), значит должна быть еще как мин. таблица пользователей.
Абажур
Да, есть таблица пользователей. Постарался упростить свой вопрос на форуме для участников.
User — Int unsigned — внешний ключ на таблицу с подробной информацией о пользователе (ФИО, группа,…)
Спасибо за помощь. Буду вникать.
miketomlin
ОК. Если будет нужен упомянутый фронт: https://gency.ru/comment/127
Логика составления комбинированного запроса (без пагинации) в нем будет примерно такая:
PHP:
$query = «SELECT * FROM `{$table(‘history’)}` LEFT JOIN `{$table(‘user’)}` USING(`user`)»; { { $query .= » WHERE `history_date`=’$p1‘»; } else { error(404); return; } } $query .= » ORDER BY {$page[‘sort’]}«;Это если нет отдельной таблицы дат. Часто бывает так, что заранее составляется расписание (определяются даты).
Абажур
Хорошо. Спасибо. То что делаю — хобби для детей по мере появления свободного времени. Будут вопросы — обращусь.