2015-03-31 66 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

現在,在這個模式中

  • 訂單和拍賣都依賴於事件

  • 競價取決於拍賣

  • 事件可以有多個訂單和拍賣,拍賣可以有多個競價

我想創建一個查詢,以便以選擇其所有Events,其Orders具有特定Buyer_IDOR其具有Biddings特別是Buyer_ID。得到這個將需要幾個連接。那不是我想的問題。問題是我不得不排序最後的結果Biddings.Creation_DateOrders.Creation_Date

換句話說,我只想獲得買方拿到訂單或買方提交的競標的活動。最後的結果應該按他做這些行動的日期排序。

我正在使用分頁。我不想獲取所有記錄並稍後以編程方式對它們進行排序。 此外,我願意修改我的模式,如果改變它可以解決這個問題。

+0

目前尚不清楚這裏的實際問題是什麼。你對此有所描述,但沒有說明你正試圖解決的實際問題。你說過你想得到什麼,但是你這樣做有什麼問題? – 2015-03-31 03:52:50

+0

我需要通過位於兩個不同表中的列對最終結果進行排序。我怎樣才能做到這一點? – Waseem 2015-03-31 10:26:00

+0

在普通的SQL中,只需'ORDER BY t1.col1,t2.col2'。推測你的問題是使用SQLAlchemy而不是PostgreSQL,所以希望知道SQLAlchemy的人會來看看這個。 – 2015-04-01 02:00:54

回答

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.seller_id == 2)\ )

記錄= bid_event.union(order_event).order_by( 'created_on')。所有()

還有小問題與此有關。它返回重複的記錄。我想

EVENT_ID得到不同的記錄

有人建議使用group_by但我無法在SQLAlchemy中與工會子句中使用它。