Имеется проект с несколькими десятками различных таблиц. Большинство записей имеют интервал дат - begin_date
и end_date
. Это можно представить как время валидности - начиная с begin_date
и заканчивая end_date
запись работает, в остальное время ее как бы нет. end_date
может быть NULL, то есть открытой, запись бессрочна
Эти таблицы связаны между собой различной бизнес-логикой. Иногда нужно вынуть записи за интервал дат, к ним приложить связанные записи за этот интервал дат и еще десяток полей из связанных записей опять же за интервал дат
Запросы довольно страшные (для понимания в основном) и писать, тем более читать их - трудно для программистов. Хочу сделать проще и короче
Типичный запрос (@DATE - дата для построения отчета):
SELECT
*
(SELECT `field1` FROM B WHERE `key1` = A.`link_key1` LIMIT 1) AS `some1`,
(SELECT `field2` FROM B WHERE `key2` = A.`link_key2` LIMIT 1) AS `some2`,
(SELECT `field3` FROM B WHERE `key3` = A.`link_key3` AND
(
(`end_date` IS NULL AND `begin_date` <= @DATE)
OR
(`end_date` IS NOT NULL AND @DATE BETWEEN `begin_date` AND `end_date`)
)
LIMIT 1) AS `some3`,
FROM A
Иногда выборку нужно вести не на одну @DATE, а на интервал дат от @DATE1 до @DATE2, там вариантов еще больше, но суть та же
То есть, грубо говоря, хочется иметь "срез" записей таблиц с учетом даты или интервала дат, как будто бы мы выбросили все лишнее и оставили только те записи, которые валидны на определенную дату/интервал дат
Читал про отображения, VIEW, судя по документации они позволяют сформировать надстройку над выборкой, не меняя сами таблицы. Например, можно сформировать выборку записей по определенному условию, и уже из нее сделать другую выборку. Вот только сделать то, что мне нужно, у меня пока что не вышло, или я не понял, как мне подставить изменяющуюся дату/интервал дат в VIEW. Формировать его на лету в структуре БД, как временную "таблицу", разве что, а потом удалять, и так каждый раз
Мне было бы полезно формировать VIEW "с параметрами", например - все записи таблицы, срок действия которых не истек на определенную дату. Ну, например вы оформляете документы владения с 1 февраля 2019 года, а дата окончания владения остается открытой (NULL). Значит на 22 февраля 2019 года запись владения будет в отображении, а на 30 января 2019 года - не будет
Еще смотрел в сторону пользовательских функций MySQL, но тоже пока не понял, как их тут можно приложить
Я начал экспериментировать с текстовыми подстановками SQL в запросы, когда вместо названия таблицы подставляется запрос выборки из этой таблицы на дату. Но мне кажется что это путь в Адъ и должно быть какое-то более изящное и красивое решение простой в общем-то задачи. Наверняка я не первый сталкиваюсь с таким )
Прошу поделиться мыслями на счет реализации или указать направление
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Прошу помощи у более опытных ребятУчусь только 3 месяца, взял себе второй макет для учебы и там вот такая секция:
помогите, пожалуйста сверстать подобную таблицу средствами html и сssБуду крайне благодарен