-2

我有一个像 ebay 这样的出价网站,我想为出价过高的用户发送通知邮件

例如

  • 用户 1 的出价为 11 美元
  • 用户 2 的出价为 10 美元

我有一个投标表:

 id  auction    bidder      bid  bidwhen         quantity  auto_bid  
 --  -------   ------  -------  --------------  --------  ----------
 1   150028       2  10.0000  20130719121024         0           0
 2   150028       1  11.0000  20130809122605         0           0
 3   150028       3  12.0000  20130809122605         0           0

和另一个表,我在其中插入一个获胜者,如获胜者 = 3 和 = 12

 id  auction  seller  winner     bid  closingdate        fee  quantity  
--  -------  ------  ------  ------  --------------  ------  ----------
 1   150028  1       3           12  20130809122658       1           1

如果在我们的例子中 id=3 是赢家,我需要通知 id=2 他出价过高并且输了

我从选择获胜者开始并加入投标人表,但我不知道如何继续。

最后,在我们的案例中,我需要在获胜者 ID 之前获得最后一个 ID 投标人 1 因为他在获胜者之前最后出价

4

2 回答 2

1

尝试以下

SELECT ID
FROM Bids
WHERE auction = 150028
AND Bid < (SELECT MAX(Bid) FROM Bids WHERE auction = 150028)
ORDER By bid DESC
LIMIT 0,1

通过此查询,您可以选择特定拍卖的 ID,并仅获得第二高出价的 ID。

编辑: 要获得所有拍卖,请尝试以下查询:

SELECT DISTINCT (SELECT b1.ID
        FROM Bids b1
        WHERE b1.auction = b2.auction
        AND b1.Bid < (SELECT MAX(Bid) FROM Bids b3 WHERE b3.auction = b1.auction)
        ORDER By b1.bid DESC
        LIMIT 0,1) as ID, b2.auction
FROM Bids b2
于 2013-09-10T08:01:21.760 回答
0

在获胜者之前获得最后一位投标人

SELECT *
  FROM
(
  SELECT b.auction, MAX(b.bid) bid
    FROM bids b JOIN winners w
      ON b.auction = w.auction
     AND b.bidder <> w.winner
   GROUP BY b.auction
) q JOIN bids b
   ON q.auction = b.auction
  AND q.bid = b.bid

这是SQLFiddle演示

在中标者之前获得所有竞标者

SELECT *
  FROM bids b JOIN winners w
    ON b.auction = w.auction
   AND b.bidder <> w.winner
 -- WHERE b.auction = 150028 -- use if you need to fetch for particular auction
 ORDER BY b.auction, b.bid DESC

这是SQLFiddle演示

于 2013-09-10T08:07:01.780 回答