MySQL отображение части записей таблицы

127
25 октября 2019, 12:00

Имеется проект с несколькими десятками различных таблиц. Большинство записей имеют интервал дат - 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 в запросы, когда вместо названия таблицы подставляется запрос выборки из этой таблицы на дату. Но мне кажется что это путь в Адъ и должно быть какое-то более изящное и красивое решение простой в общем-то задачи. Наверняка я не первый сталкиваюсь с таким )

Прошу поделиться мыслями на счет реализации или указать направление

READ ALSO
Перенос сайта с mysql в mariadb

Перенос сайта с mysql в mariadb

Имеется сайт на вордпресс с базой данных 102

177
Вёрстка hexagon [закрыт]

Вёрстка hexagon [закрыт]

Прошу помощи у более опытных ребятУчусь только 3 месяца, взял себе второй макет для учебы и там вот такая секция:

118
Разметка нестандартной таблицы html [закрыт]

Разметка нестандартной таблицы html [закрыт]

помогите, пожалуйста сверстать подобную таблицу средствами html и сssБуду крайне благодарен

103