草庐IT

PHP/MySQL 自动竞价系统

coder 2023-10-19 原文

我正在编写一个用于对某个项目进行自动出价的脚本。我认为描述我正在尝试做的事情的最简单方法是给你一个场景。假设增加 1,000 美元:

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 美元的增量,而是根据最高出价跳升最高出价。

我设置了两个表:bidsmaxbids。这是我想到的循环:

  • 插入新出价
  • 开始循环
    • $high = 从bids 表中获取当前最高出价
    • $next = 从 maxbids 中获取最低的 maxbid,其中 maxbid > $high
    • if ($next >= ($high + increment)
      • 插入出价
    • else//假设已经有最高出价
      • 打破循环
  • 结束循环

这可行,但正如我所说,这将继续插入所有 1,000 美元的增量。我宁愿它按照我上面显示的方式工作。有什么建议吗?

最佳答案

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

这是一个有趣的问题,根据我的理解,只要有新出价,这个功能就会触发。你想做的应该是这样的:

  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   

关于PHP/MySQL 自动竞价系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18135562/

有关PHP/MySQL 自动竞价系统的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  3. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  4. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  5. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  6. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  7. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  8. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  9. ruby - 在没有基准或时间的情况下用 Ruby 测量用户时间或系统时间 - 2

    因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实

  10. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

随机推荐