2015-03-31 2 views
0

У меня есть 4 таблицыНевозможно создать запрос SQLAlchemy

События

  1. event_id
  2. event_name
  3. Seller_ID

AUCT Ионы

  1. Auction_ID
  2. event_id

Заявок

  1. Bidding_ID
  2. Auction_ID
  3. Buyer_ID
  4. CREATION_DATE

Заказы

  1. Order_ID
  2. event_id
  3. Buyer_ID
  4. CREATION_DATE

Теперь в этой схеме

  • Заказы и аукционов зависит от события

  • Заявок зависит от Auctions

  • Событие может иметь несколько заказов и аукционов, Аукцион может иметь несколько Торги

Я хочу создать запрос так, чтобы чтобы выбрать все Events, чей Orders имеет значение Buyer_IDOR, чей Auctions имеет Biddings с указанием конкретного товара Buyer_ID. Для этого потребуется несколько соединений. Это не проблема, я думаю. Проблема в том, что я должен сортировать окончательный результат на Biddings.Creation_Date и Orders.Creation_Date.

Другими словами, я просто хочу получить События, для которых Покупатель получил заказ или События, для которых Покупатель подал заявку. Конечный результат должен быть заказан по датам, на которых он совершил эти действия.

Я использую разбиение на страницы.Я не хочу получать все записи и сортировать их позже программно. Кроме того, я хочу изменить свою схему, если ее изменение может решить эту проблему.

+0

Неясно, в чем проблема. Вы об этом описали, но не указали фактическую проблему, которую пытаетесь решить. Вы сказали, что хотите, но какая у вас проблема с этим? –

+0

Мне нужно отсортировать конечный результат по столбцам, которые лежат в двух разных таблицах. Как я могу это сделать? – Waseem

+0

В простом SQL, просто 'ORDER BY t1.col1, t2.col2'. Предположительно, ваша проблема связана с SQLAlchemy not PostgreSQL, поэтому, надеюсь, кто-то, кто знает SQLAlchemy, придет и увидит это. –

ответ

0

Я успешно достиг этого с помощью следующего запроса.

bid_event = (db.session.query (событие, Bidding.created_on.label ('created_on')). ​​\ присоединиться (аукцион). \ присоединиться (торгов). \ фильтр (ставок. seller_id == 2) \ )

order_event = (db.session.query (событие, Order.created_on.label ('created_on')). ​​\ присоединиться (Order). \ фильтр (Order.seller_id == 2) \ )

записи = bid_event.union (order_event) .order_by ('created_on'). Все()

Существует еще небольшая проблема с этим. Он возвращает повторяющиеся записи. Я хочу, чтобы получить различные записи по

event_id

Кто-то предложил использовать group_by но я не могу использовать его в SQLAlchemy с пунктом объединения.

Смежные вопросы