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

これは入札プラットフォームですが、私が苦労している問題は、ユーザーが入札を取り消すことができるということです。その場合は、DB内の情報を修正する必要があります。入札は段階的に行われます。

現在、USER 1010が入札を撤回した場合でも、実際に2750にする必要がある場合、最高入札額は4000です。これは、2人のユーザー間の最高値だからです。

4

1 に答える 1

2

これは部分的に最も簡単です:

  1. まず、撤回されたユーザーに属する入札を削除します。
  2. 次に、落札者のユーザーIDを選択します。
  3. 次に、最高入札者によって行われなかった最高入札を見つけます。
  4. 手順3で見つけたものよりも高い最低入札額を取得します。これが新しい最高入札額になります。
  5. 最後に、1つを除くすべての高額入札を削除します。

このようなもの:

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;

3つの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 に答える