возможно ли такое?

psevdo
Дата: 21.01.2013 23:17:25
Привет всем. Передо мной стоит такая задача. Имеется портал, где регистрируются магазины. У владельцев магазина имеется возможность поднять свой магазин в топ. Услуги хранятся в таблице service_order. Вот сами таблицы:

shops
-----------------
id
name
date - дата создания (timestamp)


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


Правильный вывод магазинов это сортировка по дате добавления - сначала выводятся самые новые. Тут ничего сложного. Но как мне сделать такую сортировку, что бы сначала выводились топовые магазины?
tanglir
Дата: 22.01.2013 05:43:27
psevdo,

а где в этих таблицах признак "топовости"?
Добрый Э - Эх
Дата: 22.01.2013 05:50:47
psevdo,

из таблицы заказа услуг выбираешь последние проплаченные и действующие услуги по продвижению магазина (набор полей деривед-таблицы: shop_id, paid_to, к примеру), левым джойном цепляешь все это к списку магазинов, сортировку делаешь по coalesce(paid_to, date)
psevdo
Дата: 22.01.2013 15:21:57
Добрый Э - Эх,

Не совсем понял. Можешь немного кода написать?
psevdo
Дата: 22.01.2013 15:24:48
tanglir,

Явного признака как такового нету. Тут нужно просто смотреть запись в таблицу с заказами услуг и даты (с какого по какое оплачена услуга)
psevdo
Дата: 22.01.2013 16:34:28
Делаю вот такой запрос:
SELECT * 
FROM mr_shops s
LEFT JOIN mr_service_order so ON s.id = so.shop_id


Направление правильное вроде.. Но стоит только добавить условие, выводится только одна запись:
SELECT * 
FROM mr_shops s
LEFT JOIN mr_service_order so ON s.id = so.shop_id
WHERE so.srv_name =  'on_top'