MySql查询找到最低的

时间:2012-09-14 03:34:18

标签: mysql

我有一张数据表:

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

这是一个竞价平台,但我遇到的问题是用户可以撤消他们的出价。如果他们这样做,则需要修改DB中的信息。出价按增量排列。

目前我已经知道,如果USER 1010撤回其出价,那么当我实际需要它为2750时,最高出价仍为4000,因为这是2个用户之间的最高值。

1 个答案:

答案 0 :(得分:2)

这部分最简单:

  1. 首先,删除属于已撤消用户的出价。
  2. 然后,选择出价最高者的用户ID。
  3. 接下来,找出最高出价者未提出的最高出价。
  4. 获得的最低出价高于第3步中的出价。这将是新的高出价。
  5. 最后,删除除一个高出价之外的所有出价。
  6. 这样的事情:

    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);
    

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