Запутался, прошу помощи.

psevdo
Дата: 19.01.2013 14:57:20
Всем привет. Я запутался в своей задаче. Прошу помочь. Задача такая. На портале регистрируются магазины. На портале имеется блок коммерческих магазинов. Магазины попадают туда, если их владелец оплатил соответствующую услугу. Вот собственно мне и нужно вывести эти магазины, у которых оплаченная услуга еще активна.

Таблица с магазинами
shops
-----------------
id
name


Таблица с заказами платных услуг
service_order
----------------
shop_id - id магазина
srv_count - на какой срок оплачивается услуга (int)
srv_period - на какой срок оплачивается услуга (enum: day, week, month)
paid - оплачена ли услуга (0 или 1)
date_paid - дата оплаты (timestamp)
javajdbc
Дата: 19.01.2013 17:19:58
psevdo,

примерно так:

оплата начилась в точке DATA_PAID
продолжалась в течении SRV_COUNT * SRV_PERIOD
конечная точка в момент DATA_PAID_END = DATA_PAID + SRV_COUNT * SRV_PERIOD
сервис оплачен если NOW() попадает в промежуток между DATA_PAID : DATA_PAID_END

если вам надо селать это по работе -- делайте на клиентском языке (ПХП, Питон, итд)
если надо имено на СКЛ, то передайте своему преподу что он изврашенец :-)

примерно так:
select shop_id
from service_order
where
now() between date_paid and
case
   when srv_period = 'day' then adddate(date_paid, interval srv_priod day)
   when srv_period = 'week' then adddate(date_paid, interval srv_priod week)
   when srv_period = 'month' then adddate(date_paid, interval srv_priod month)
end


колонка PAID совершено не нужна ибо все вычисляется по датам.
psevdo
Дата: 19.01.2013 18:22:33
А как это делается по-нормальному7
javajdbc
Дата: 19.01.2013 18:32:09
psevdo,

ИМХО, чем проше -- тем лучше -- хранить
каждую оплату в виде:

ид (инт,ПК)
юзер_ид (инт,ФК)
сервис_ид (инт,ФК)
оплачено_от (дата)
оплачено_по (дата)

сложные енум временые периоды -- можно оставить что бы
показывали как опции на веб страницах.
Но когда выбор сделан, лучше пересчитать
конечную дату и сохранить конкретно дате_тиме значение
psevdo
Дата: 20.01.2013 11:29:33
Точняк!! Так ведь намного проще. Как я сам до этого не додумался! Спасибо большое, мир твоему дому!