【发布时间】:2014-06-27 15:49:33
【问题描述】:
这有点棘手。我有一个非常具体的要求。
这个数据库有两个表:表A(客户表)和表B(订单表)。
表 A 的每一行都有一个唯一的客户 ID (customerid)。它还有一个服务日期 (DATEOFS) 列,该列主要填充以前数据库中的旧信息。
表 B 对每个订单都有一个唯一的订单号 (ordernum)。每个订单还链接到客户 (customerid) 并具有订单日期 (dofserv)。
为了在实际 PHP 脚本中显示服务日期,我使用以下查询:
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 中完成,但我不确定运行需要多长时间。
【问题讨论】:
-
我不确定这是否有效,因为我不知道在第二个选择中是否可以使用 order by 和 limt: update table a set a.dateofs = ( SELECT dofserv FROM orders WHERE customerid =" . $result['customerid'] . " ORDER BY dofserv DESC LIMIT 1).