За последние 24 часа нас посетили 18707 программистов и 1646 роботов. Сейчас ищут 957 программистов ...

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

Тема в разделе "PHP и базы данных", создана пользователем iliavlad, 10 июн 2011.

  1. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    Есть некоторые сущности, которые заполняют архив.
    Свойства сущности: ид, ид группы и доп.свойства (add_property).
    Свойства архива группы: ид сущности, дата записи архива, доп. свойства архива группы. На каждую группу есть своя таблица с архивом.

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

    Таблица сущности: entity.id, entity.group_id, entity.add_property.
    Таблица архива группы а: a_group.entity_id, a_group.archive_date, a_group.add_property
    Таблица архива группы b: b_group.entity_id, b_group.archive_date, b_group.add_property
    и т.д.
    add_property разные между группами

    Значит для одной группы строим запрос
    [sql]
    SELECT entity.id, entity.add_property,
    MAX(a_group.archive_date) AS archive_date
    LEFT JOIN a_group ON a_group.entity_id = entity.id
    HAVING archive_date < '2011-06-09'[/sql]

    Для двух и более групп сейчас запрос строится так
    [sql]
    SELECT entity.id, entity.add_property,
    IF(entity.group_id=1,
    MAX(a_group.archive_date),
    MAX(b_group.archive_date)) AS archive_date
    LEFT JOIN a_group ON a_group.entity_id = entity.id
    LEFT JOIN b_group ON b_group.entity_id = entity.id
    HAVING archive_date < '2011-06-09'[/sql]

    и с увеличением групп количество условий растёт.

    Нормальный подход для решения задачи?) Можно ли улучшить данный вариант (возможны любые способы).