【发布时间】:2021-10-30 11:17:57
【问题描述】:
我有一个表跟踪,其中包含
| id | name | trackingNumber |
|---|---|---|
| 1 | John Doe | 1Z21343V43DF4434 |
| 2 | John Doe | 1Z21343V43DF4435 |
| 3 | Jane Smith | 1Z21343V43DF4436 |
| 4 | Mark Jacobs | 1Z21343V43DF4436 |
| 5 | Mark Jacobs | 1Z21343V43DF4437 |
| 6 | Mark Jacobs | 1Z21343V43DF4438 |
还有一个包含订单的表
| id | OrderNumber | Name |
|---|---|---|
| 1 | 12-12324232 | John Doe |
| 2 | 12-12324234 | Mark Jacobs |
| 3 | 12-12324236 | Michael Smith |
当我运行查询时
select * from tracking t
join orders o
on (t.name = o.name OR o.name = t.name)
我为 John Doe 和 Mark Jacobs 获得了多个结果,因为他们都有多件装运。我不能做一个限制,因为在现实世界中会有超过 100 个未发货的订单和 100 个跟踪号。
我希望能够仅获得最新的跟踪号,这样订单就不会被所有跟踪号多次更新,因为一个跟踪号会显示所有跟踪号。
当前查询的 SQL Fiddle - http://www.sqlfiddle.com/#!9/569d4a/1/0 我只想要每个名称的最新跟踪号。
【问题讨论】:
-
你怎么知道哪一个是最新的?按日期?如果是,表
tracking应该有一个日期列,但看看你的例子,它没有。 -
@FaNo_FN 是的,有一个日期列
-
太棒了!您能否更新您的问题并在相关表格中包含日期列?另外,请在您的问题中说明预期结果。谢谢
-
@FaNo_FN 它并没有真正改变任何东西。跟踪表有一个 created 日期时间,而 orders 表有一个paid_time 日期时间。我检查 created >=paid_time 以确保在下订单后创建跟踪。
-
请问您,每个订单号是否只有一个跟踪号或更多?并且假设tracking number是在付款后才创建的,那么如何将order table 与tracking table 联系起来呢?
标签: php mysql laravel join inner-join