Новые таблицы на каждый день, неделю, месяц.

  • Автор темы MrErmolin
  • 71
  • Обновлено
  • 15, May 2024
  • #1
Здравствуйте, у меня есть веб-приложение, которое я создавал последние пару лет.

Его основная роль — регистрировать посещаемость сотрудников и их работу в течение дня, а затем в офисе.

персонал для расчета заработной платы и часов, отработанных на нескольких должностях.

Также офис может видеть, кто над чем работает и т. д.

На данный момент каждое действие, будь то вход в систему или выход из системы, начало работы, завершение работы, поход на обед или окончание обеда и т. д.

Это веб-приложение будет доступно только в локальной сети.

Все эти действия хранятся в одной таблице Mysql, поскольку каждое из них должно иметь значение «выключено».

Проблема в том, что я хотел бы иметь новую таблицу каждый день, а затем каждый день копировать ее в еженедельную таблицу каждый день.

удаление таблицы дней после проверки..

Еженедельные таблицы будут соответствовать неделе заработной платы.

Эти еженедельные таблицы будут храниться до месяца, а затем их упростят. данные в другую таблицу за год.

Эта часть ежедневной, еженедельной и ежемесячной таблицы имеет множество способов, но я не уверен.

Использовать событие mysql??, скрипты из Linux (скрипт cron или LT) или другие способы??

Лучшие способы создания ежедневных таблиц и других таблиц без помощи пользователя.

Я использую PHP в качестве внутреннего языка.

Несколько лет назад я использовал временные таблицы в VBA для системы торговых точек для магазинов на углу, которая работала хорошо.

Но это веб-приложение PHP MySQL в Linux будет иметь доступ к нескольким пользователям и расчет заработной платы с использованием запросов для извлечения часов работы и рабочих мест сотрудников, а также их часов, и я

хотелось бы, чтобы размер таблицы был как можно меньшим.

Надеюсь, это имеет смысл.

MrErmolin


Рег
05 Mar, 2014

Тем
1

Постов
2

Баллов
12
  • 08, Jun 2024
  • #2
Спасибо Сарак за ваш ответ.

Идея создания ежедневных таблиц для всех входов и выходов, а также начатых и завершенных заданий заключается в том, что объем данных, собираемых каждый день, быстро растет день за днем.

Для разных отделов, в разных браузерах, в разных местах выполнение довольно сложных запросов к этим данным требует времени.

Некоторые запросы и отчеты о вакансиях могут передаваться нескольким людям и несколько раз.

Некоторые запросы администратора по персоналу и должностям состоят из нескольких запросов. Благодаря небольшому размеру таблицы можно быстро выполнять сложные запросы, запрошенные несколькими сайтами.

Некоторые из этих данных помогают обновлять информацию о заданиях и офисных уведомлениях практически в реальном времени. Каждый день создается новая таблица, и в конце этого дня данные можно перенести в еженедельную таблицу.

После переноса в еженедельную таблицу и сравнения эта дневная таблица будет удалена, а для нового дня будет создана новая таблица.

Ежедневные таблицы должны иметь очень быстрый доступ к отчетам (уведомлениям) в реальном времени и отчетам по запросам сотрудников офиса, администраторов, сотрудников и расчета заработной платы.

Таким образом, в любой день будет только один дневной стол.

Еженедельная таблица будет соответствовать продолжительности обычной недели заработной платы клиента.

При переносе этой недели он должен содержать все строки за последние семь дней или неделю выплаты заработной платы.

Начало нового дня добавляет строки из данных предыдущего дня, проверяет их, удаляет и создает новую таблицу на сегодняшний день.

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

После использования и обработки еженедельной таблицы она добавляется в месячную или годовую таблицу.

Это часть приложения, которое я создал, поскольку оно также охватывает запись работ по производству, приему и заказу деталей и компонентов для работ.

Стоимость материалов за работу.

и т. д. Я просто не могу уложить в голове, как программно назвать (нужно где-то записать имя), надежно построить и иметь доступ для ввода данных.
 

Konstant2


Рег
01 Apr, 2012

Тем
1

Постов
3

Баллов
13
  • 10, Jun 2024
  • #3
Я думаю, вы упустили суть базы данных SQL. Вы выполняете запрос на основе диапазона дат, поэтому вам не нужны все эти таблицы — они устарели. Может быть, вы сможете лучше объяснить, какую ВЫГОДУ ваша система получит от наличия множества меньших таблиц?
 

Xrol


Рег
22 Apr, 2015

Тем
0

Постов
2

Баллов
2
  • 13, Jun 2024
  • #4
Можете ли вы иметь свою ежедневную таблицу и просто удалять записи? Вы гений в индексировании? Взгляды? Если вы решили создавать таблицы.. Отследить их будет легко — достаточно иметь еще одну таблицу с датой и именем таблицы.
 

Polygonalka


Рег
28 Mar, 2013

Тем
1

Постов
2

Баллов
12
  • 14, Jun 2024
  • #5
Я бы предложил использовать одну таблицу данных с ИНДЕКСАМИ, чтобы она работала быстрее.

Многие миллионы записей могут храниться и запрашиваться в режиме реального времени без каких-либо проблем, если индексы созданы правильно и запросы сделаны соответствующим образом.

Если вам нужна система с несколькими таблицами, все, что вам нужно сделать, это скопировать всю таблицу в полночь в «weekly_table_data».

Скопируйте все записи, полные данные, как есть.

Затем просто удалите и перестройте ежедневную таблицу table_data, которая на этом этапе будет пустой.

Теперь вы можете выполнять еженедельные запросы к большой таблице Weekly_table_data и ежедневные запросы к меньшей таблице table_data.

Тот же запрос, только другое имя таблицы...

Вам не придется создавать таблицу месяцев, потому что ваша еженедельная таблица содержит все данные, поэтому вы можете запросить ее самостоятельно, просто измените дату в запросе.

Пример:

table_data

id bigint(18) auto_increment, идентификатор сотрудника int(10), временная метка startTime, временная метка endTime

Когда пользователь войдет в систему, сделайте новую вставку в эту таблицу, например:

вставить в table_data (employeeID, startTime) значения (123, 2021-12-23 09:30:57);

Когда пользователь выходит из системы или делает перерыв, просто обновите поле endTime в последней записи идентификатора сотрудника этого пользователя.

выберите идентификатор из table_data, где идентификатор сотрудника = 123, упорядочите по идентификатору, ограничение 1;

обновить набор table_data endTime='your_time', где id=your_ID_from_prev_query предел 1;

Они возвращаются, начинают новую пластинку, как в первом шаге.

В этой системе вы создаете индекс типа: (employeID, startTime, endTime).

Ваш дневной запрос будет таким:

выберите timediff( startTime, endTime ) из table_data, где идентификатор сотрудника=123 и startTime>='2021-12-23' и endTime<='2021-12-23';

Этот запрос выдаст все разницы во времени за весь день, а количество возвращаемых записей будет равно тому, сколько раз пользователь делал перерыв.

Используйте PHP, чтобы просто добавить все разницы во времени и отобразить общее время, количество сделанных перерывов и т. д.

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

Вы снова получаете тот же набор результатов, но с большим количеством записей и данными за всю неделю.

В этой системе есть только один недостаток: при каждом запросе будет читаться вся таблица, потому что вы не используете «лимит».

Чтобы решить эту проблему, просто добавьте столбец в таблицу сотрудников, который отслеживает, сколько записей доступно в течение дня.

Каждый раз, когда пользователь выходит из системы, увеличивайте число.

Затем используйте это число как «предел» в последнем запросе.
 

aleksbung


Рег
06 Sep, 2011

Тем
0

Постов
3

Баллов
3
Тем
49554
Комментарии
57426
Опыт
552966

Интересно