PHP/MySQL自动竞价系统

3

我正在编写一个自动出价脚本,与物品相关。我认为最简单的方法是通过给您一个场景来描述我正在尝试做什么。假设每次出价增加1000美元:

Asking Price: $1,000
Bidder 1: Max Bid of $4,000 -> High Bid: $1,000
Bidder 2: Max Bid of $3,000 -> High Bid: $3,000 -> [AUTO BIDDER 1] High Bid: $4,000
Bidder 3: Max Bid of $8,000 -> High Bid: $5,000
Bidder 4: Max Bid of $10,000 -> [AUTO BIDDER 3] High Bid: $8,000 -> High Bid: $9,000

我正在尝试设计一个循环来遍历它们,但我不确切知道如何做。我有一个循环可以适用于每一次出价,但我希望基于最高出价跳过每个$1,000的增量,而是直接跳到最高出价。
我有两个表:出价(bids)和最高出价(maxbids)。这是我想到的循环:
- 插入新出价 - 开始循环 - $high = 从bids表中获取当前最高出价 - $next = 获取 maxbids 中最低的 maxbid 其中 maxbid > $high - 如果($next >= ($high + increment)) - 插入到bids中 - 否则 // 假设已有最高出价 - 中断循环 - 结束循环 - end loop 这个循环可以工作,但正如我所说,它会保留所有的 $1,000 增量。我更希望它像我上面展示的那样工作。有什么建议吗?

3
请提供您在此过程中已经使用的任何代码。 - castis
thats not how S.O works - user557846
2
@Dagon他不是在要求代码,而是在寻求指导。 - Charlie
1
@Dagon,我看到有些问题比我的还要短,而且原始问题中没有代码,但它们得到了答案。我以前在这里问过问题,从未遇到过问题。请查看http://stackoverflow.com/about,在右侧:“询问...软件算法”。 - Devin
1
@Dagon 不,他不是。控制结构与语法一样重要甚至更为重要。他展示了一个自己尝试过的循环,并且询问改进方法。如果他知道它不是他想实现的控制结构,那么写那个循环有什么意义呢? - Glitch Desire
显示剩余6条评论
1个回答

5

我认为你可以使用条件树,而不是循环

这是一个有趣的问题,从我的理解来看,每当进行新的出价时,该函数将被触发。你所想要做的应该是:

  1. 存储用户试图插入的出价。
  2. 获取当前竞标者的最高出价(此时不应存在比这个更高的出价,因为它们将已经被该函数之前的迭代解决)。

接下来:

/**
 * $currentBidder = The current high bidder
 * $highBid       = The current high bidder's high bid
 * $thisBidder    = Bidder placing the new bid
 * $thisBid       = The bid that triggered the function
 * $increment     = The minimum bid increment
 */
function placeBid($currentBidder,$highBid,$thisBidder,$thisBid,$increment) {
    if($thisBid > $highBid) {
        // Insert $highBid as current bid, for $currentBidder
        if($thisBid > $highBid + $increment) {
            // Insert $thisBid into highbids table
            // Insert $highBid + $increment as current bid, for $thisBidder
        } else {
            // Insert $thisBid as current bid, for $thisBidder
        }
    } else {
        // Insert $thisBid as current bid for $thisBidder
        if($highBid > $thisBid + $increment) {
            // Insert $thisBid + $increment as current bid, for $currentBidder
        } else {
            // Insert $thisBid as current bid, for $currentBidder
        }
    }
}

注:

  1. 如果新出价等于最高出价,我会代表当前出价者选择前者。
  2. 在所有情况下,我都会选择最高出价,即使它不比当前最高出价+增量更高。

显然,你需要检查是否是第一个出价,如果是,将出价设置为最低要求值。你需要检查出价是否有效(大于当前出价+增量),但我没有包含该代码。

据我所见,如果每次进行竞标时触发函数,你将根本不需要循环,只需要一个条件树。

场景:

Item Current Bids: A, 4000
Item Current Max:  A, 4000
--> C bids 7500
Item Current Bids: A, 4000; C, 5000
Item Current Max:  C, 7500
--> B bids 7500
Item Current Bids: A, 4000; C, 5000; B, 7500; C, 7500
Item Current Max:  C, 7500
--> A bids 9000
Item Current Bids: A, 4000; C, 5000; B, 7000; C, 7500; A, 8500
Item Current Max:  A, 9000   

这看起来正是我所需要的。我正在将它加入代码中,等待结果后会回复评论。看起来非常有前途! - Devin
1
终于完成了整个脚本,从我测试的结果来看,它完美地运行了。感谢你的帮助! - Devin
@Devin 很高兴能够帮助到你。祝你愉快。 - Glitch Desire
你能否更好地记录下placeBid方法的参数含义?在我看来,它似乎并不总是正确工作。它看起来很好,但并不十分精确。 - tomasr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接