我有一张数据表:

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

这是一个竞价平台,但我正在努力解决的问题是,用户可以撤回他们的出价。如果他们这样做,那么数据库中的信息需要修改。投标书是按增量进行的。
目前我有,如果用户1010撤回他们的出价,最高出价仍然是4000时,我实际上需要它是2750,因为这是两个用户之间的最高值。

最佳答案

这在某些方面是最简单的:
首先,删除属于收回用户的投标。
然后,选择最高出价者的用户ID。
接下来,找出不是最高出价者出价最高的。
得到比步骤3中找到的出价高的最低出价。这将是新的高出价。
最后,删除除了一个高出价。
像这样的:

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

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

关于mysql - MySQL查询找到最低的高,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12417758/

10-16 15:46