1

我有一个数据表:

BID     USER    RETRACTED
1500    75      0
1900    75      0
2000    75      0
2000    75      0
2500    586     0
2750    75      0
3000    75      0
3250    1010    0
3500    75      0
3750    1010    0
4000    75      0

这是一个出价平台,但我正在努力解决的问题是用户能够撤回他们的出价。如果他们这样做,则需要修改数据库中的信息。投标是按增量放置的。

目前我认为如果 USER 1010 撤回他们的出价,最高出价仍然是 4000,而我实际上需要它是 2750,因为这是 2 个用户之间的最高值。

4

1 回答 1

2

这将是最简单的部分:

  1. 首先,删除属于被撤回用户的出价。
  2. 然后,选择出价最高者的用户 ID。
  3. 接下来,找到不是最高出价者的最高出价。
  4. 获得高于第 3 步中找到的最低出价。这将是新的最高出价。
  5. 最后,删除除一个高出价之外的所有出价。

像这样的东西:

DELETE FROM bids WHERE user=1010;
SET @highbidder=(SELECT user FROM bids ORDER BY bid DESC LIMIT 1;
SET @secondbid=(SELECT bid FROM bids WHERE user != @highbidder ORDER BY bid DESC LIMIT 1);
SET @newhigh=(SELECT bid FROM bids WHERE bid > @secondbid ORDER BY bid ASC LIMIT 1)
DELETE FROM bids WHERE bid > @newhigh;

这三个SET陈述可以被浓缩:

SET @newhigh=(SELECT bid FROM bids WHERE bid > (SELECT bid FROM bids WHERE user != (SELECT user FROM bids ORDER BY bid DESC LIMIT 1) ORDER BY bid DESC LIMIT 1) ORDER BY bid ASC LIMIT 1);

但是我认为这不是一个好主意,部分是出于性能原因,但主要是出于可读性。

于 2012-09-14T03:43:00.657 回答