gpt4 book ai didi

php - 冗余数据总是不行吗

转载 作者:可可西里 更新时间:2023-11-01 08:37:20 26 4
gpt4 key购买 nike

我正在开发一个类似商店的系统(使用 PHP 和 MySQL),它可以将发票导出到外部系统。过程是这样的;

  • 客户订购产品并创建发票
  • 为此发票生成 XML 并发送到外部服务器
  • 外部服务器处理 XML 并用另一个 XML 响应
  • 系统处理响应。

对于发送到外部服务器的每个 XML,都会在数据库中创建一条记录,其中包含相应的发票编号和状态(状态最初为 SENT,表示 XML 已发送。)系统已处理响应,状态为 SUCCESSERROR。现在,问题是;在某些时候,我想获取在请求表中没有记录且状态为 SUCCESS 的发票列表。

编辑:如果状态为ERROR,将对同一张发票提出新的请求,因此每张发票可能会有多个请求。

我的订单表有列 IDInvoiceNumber,请求表有列 IDInvoiceNumberStatus,所以要获得提到的列表,我可以这样做:

SELECT InvoiceNumber 
FROM orders AS a
LEFT JOIN requests AS b
ON a.InvoiceNumber = b.InvoiceNumber
WHERE NOT EXISTS (SELECT ID
FROM requests
WHERE status = "SUCCESS"
AND request.InvoiceNumber = a.InvoiceNumber)

但是,第二个选项是为订单表创建一个额外的列(即 requestSucces),该列最初为 0,如果系统处理了相应发票的成功响应,则设置为 1。这将导致更容易和更便宜的查询来获取需要(重新)发送的发票列表(SELECT invoiceNumber FROM orders WHERE requestSuccess = 0),但是该字段在技术上是多余的.

我的问题是:什么会更好;以拥有冗余字段为代价使用简单查询,或者使用较重的查询而不用冗余污染数据库。当然;如果你们中有人知道不使用冗余的更好解决方案,那就更好了。

最佳答案

当您使状态字段数字错误=0 和成功=1 时,您可以执行按发票编号分组的最大状态以查看哪些发票没有

关于php - 冗余数据总是不行吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8614445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com