在php中比较两个mysql db表/数组并根据时间戳进行更新

时间:2013-05-24 17:59:30

标签: php mysql

我知道可怕的头衔,我找不到更好的方式来表达我的问题。

我搜索了SO没有成功,但如果答案已经在那里,请随时链接它,我将彻底阅读。


我正在建立一个图书订购系统。人们将在整个月内订购书籍,并且每个月末都会收到一笔大订单。

订单被记录到Order表中,其中包含以下字段:

order_id, book_id, quantity, language, person_ordering, timestamp, month, year

订单到达时,会将其输入到已收到的表格中,其中包含以下字段:

book_id, quantity, language

现在假设一个人订购(2)书籍1的副本。另一个人订购(3)。另一个(5)。总计(10)。 然后订单到货,它只有7份。

我正在尝试编写一个可以找到的脚本/函数:

  • 哪些人会收到他们的书副本(先到先得,所以先订购的人会先完成订单。
  • 如果某人只能部分履行其订单,则更新订单表(或者可能需要新的待处理订单表?)以反映他们还有等待履行的X金额。接下来的一个月,他们的订单将首先根据订购日期完成。

我考虑过从Orders表中提取信息,根据订单生成时的时间戳并对其进行排序,然后从Received表中提取信息并以某种方式比较两个数组并更新第三个数组? 或许还有一个我想念的更简单的解决方案。

如果需要更多信息,我很乐意提供。 我连续两天都把头发拉过这个问题了。 任何帮助将不胜感激。

谢谢!

3 个答案:

答案 0 :(得分:0)

您可以尝试在Received表中添加额外字段。 当订单到来时,您可以计算我们当时可以提供的副本数量。

book_id, quantity,qty_available, language

 1. B1    2   2  EN
 2. B1    3   3  EN
 3. B1    5   2  EN

答案 1 :(得分:0)

假设Received表是针对当前库存的,并且订单仅在整个订单发货时发货,以下是您可以做的建议:

  • 在Order中添加一个字段,以确定订单是否已履行。
  • 从按订单排序的订单中选择,按日期排序。您可以按已接收的数量进行限制。
  • 开始履行订单并将其标记为这样,直到达到Received的数量。
  • 如果剩余的已接收数量不足以履行订单,请将其保留并留下下次收到的剩余数量。

希望它有意义。

答案 2 :(得分:0)

对我而言,听起来您可以取消使用单个日期时间戳替换您的时间戳,月份和年份变量。
另外,在Received表中添加一列用于收集的日期时间戳 最后,制作另一张表来跟踪已履行的订单。

  1. 按照“订单”数据的日期时间戳下降所需的月份选择*。
  2. 在单独的查询中,使用正确的月份获取“已接收”数据以进行编程比较。
  3. 将每个“已收到”book_id的“已接收”数量放入单独的变量(可能是键/值数组)。
  4. 对于每个“收到的”book_id,比较并计算子循环中每个订单所需的“有序”数量,更新“已接收”数量值。在子循环的每次迭代结束时,如果“已订购”数量不等于0,则需要在下个月添加另一个具有剩余数量的条目,并将所有已履行的订单输入到新表中。 / LI>

    *您**不会**想要修改任何现有记录,因为您将来几乎肯定会需要这样做。

    清除泥土? :P

    *数据库提示 - 每条记录的每个条目都应该**始终**有一个日期时间戳,如果可能的话,“谁做了”。