Php 使用表B中的信息(包含重复信息)更新表A
这有点棘手。我有人有一个非常明确的要求 该数据库有两个表:表A客户表和表B订单表 表A的每一行都有一个唯一的客户ID customerid。它还有一个Date of Service DATEOFS列,该列主要由以前数据库中的旧信息填充 表B为每个订单提供了唯一的订单号ordernum。每个订单还链接到客户customerid,并具有订单dofserv的日期 为了在实际的PHP脚本中显示服务日期,我使用以下查询:Php 使用表B中的信息(包含重复信息)更新表A,php,mysql,sql,database,Php,Mysql,Sql,Database,这有点棘手。我有人有一个非常明确的要求 该数据库有两个表:表A客户表和表B订单表 表A的每一行都有一个唯一的客户ID customerid。它还有一个Date of Service DATEOFS列,该列主要由以前数据库中的旧信息填充 表B为每个订单提供了唯一的订单号ordernum。每个订单还链接到客户customerid,并具有订单dofserv的日期 为了在实际的PHP脚本中显示服务日期,我使用以下查询: SELECT dofserv FROM orders WHERE customeri
SELECT dofserv FROM orders WHERE customerid=" . $result['customerid'] . " ORDER BY dofserv DESC LIMIT 1
这将返回单个客户最近的服务日期
我试图用表B中的-most-recent-DOFSERV更新表A中的DATEOFS
据我所知,如果只有一个匹配行,则以下查询将起作用:
UPDATE clients a, orders b SET a.DATEOFS = b.DOFSERV WHERE a.customerid = b.customerid
但是,由于orders表有多行与customerid匹配,因此我不确定如何仅使用最新的orders.DOFSERV更新clients.DATEOFS
有什么建议吗?想在纯MySQL中这样做,从命令行运行;我可以用PHP实现,但我不确定运行需要多长时间。一种方法是:
UPDATE clients a
SET
a.DATEOFS=(SELECT MAX(b.DATEOFS) FROM orders b WHERE a.customerid=b.customerid);
但如果没有匹配的顺序,此查询将在a.DATEOFS中插入NULL。如果这不是您想要的,您可以将其稍微修改为:
UPDATE clients a
JOIN orders o ON a.customer_id=o.customer_id
SET
a.DATEOFS=(SELECT MAX(b.DATEOFS) FROM orders b WHERE a.customerid=b.customerid);
此查询将仅将更新限制为客户机中订单中至少有一个匹配行的行。您可以在聚合查询上加入客户机表:
UPDATE clients a
JOIN (SELECT customer_id, MAX(dofserv) AS md
FROM orders
GROUP BY customer_id) b ON a.customerid = b.customerid
SET a.dateofs = b.md
这是一种只更新最少行数的方法:
update clients a
set dofserv = ( select max(dofserv)
from orders b
where b.customerid = a.customerid
)
where exists ( select *
from orders b
where b.customerid = a.customerid
and b.dofserv > a.dofserve
)
我不确定这是否有效,因为我不知道在第二个select中是否可以使用order by和limt:update table a set a.dateofs=select dofserv FROM orders,其中customerid=$结果['customerid']。按dofserv DESC LIMIT 1订购。