2016-11-27 71 views
0

我想自動更新我的listings表的從bids表中的最高bidder_ID buyer_ID列。我的問題是...我怎樣才能得到與listing表中的listing_ID相關的bid_listing事件更新上市每一分鐘

我目前的事件查詢:

CREATE EVENT updateAuction 
ON SCHEDULE EVERY 1 MINUTE 
DO 
    SET buyer_ID = (SELECT MAX(bidder_ID) FROM bids WHERE bid_listing = (Need each listing_ID from the listings table here)) 
    FROM listings 
    WHERE list_expires < now() 
    AND buyer_ID = NULL 

架構上的代碼示例

listing_ID list_expires buyer_ID sold_price 
+0

使用'SET buyer_ID'如何在DB知道你的意思是哪個表?你需要一個'update'語句 –

+0

@juergend oops ..將修復該部分 – user4756836

+0

而實際上 - 你真的需要嗎?爲什麼不在SELECT中計算需求數據? –

回答

1

基地投標

bid_ID bid_listing bidder_ID bid_amount 

架構的資訊和的「聲明HIG HEST bidder_ID從投標表」

我想你需要的是一個UPDATE JOIN

Update listings set 
    buyer_id = table2.max_bidder 
From listings table1 
Inner Join (Select bids.listing_ID 
        , max(bids.bidder_ID) as max_bidder 
      From bids 
      Group by listing_ID) table2 
     on (table1.listing_ID = table2.listing_ID) 
WHERE list_expires < now() 
    AND buyer_ID is NULL 

這裏是JOIN使用 SUB查詢來獲得與出價最高的bidder_id的UPDATE的另一個例子量。

UPDATE listings set 
    buyer_id = table2.bidder_ID 
    , sold_price = table2.bid_amount /* Optional */ 
From listings table1 
Inner Join (Select bids.listing_ID, bids.bidder_ID, bids.bid_amount 
      From bids 
      Inner Join (Select bids.listing_ID 
           , max(bid_amount) as bid_amount 
          From bids 
          Inner Join listings 
            on (bids.listing_ID = bids.listing_ID) 
          Where list_expires < now() 
          and buyer_ID is NULL 
         ) winning_amount 
        on ( bids.listing_ID = winning_amount.listing_ID 
         and bids.bid_amount = winning_amount.bid_amount 
         ) 
      ) table2 
     on (table1.listing_ID = table2.listing_ID) 
WHERE list_expires < now() 
    AND buyer_ID is NULL 

我希望它能幫助

問候

+0

它給出語法錯誤'從列表table1 Inner Join(選擇bids.listing_ID,m'在第3行) – user4756836

+0

I不要以爲從表列表1是需要的 – user4756836