gpt4 book ai didi

mysql - 在连接查询中返回不同的记录 - Rails 4

转载 作者:行者123 更新时间:2023-11-29 11:44:57 25 4
gpt4 key购买 nike

我正在尝试获取并显示包含当前状态的订单列表。

@orders = Order.joins(order_status_details: :order_status)
.order('id DESC, order_status_details.created_at DESC')
.select("orders.id, order_status_details.status_id, order_statuses.name, order_status_details.created_at")

它工作得很好,但返回的所有行的订单 ID 都是重复的,如下所示:

+----+-----------+----------------------+---------------------+
| id | status_id | name | created_at |
+----+-----------+----------------------+---------------------+
| 8 | 1 | Pending | 2016-01-31 16:33:30 |
| 7 | 3 | Shipped | 2016-02-01 05:01:21 |
| 7 | 2 | Pending for shipping | 2016-01-31 05:01:21 |
| 7 | 1 | Pending | 2016-01-31 04:01:21 |
+----+-----------+----------------------+---------------------+

正确的答案必须返回唯一的 id,因为上面的示例应该是第一行和第二行。

我已经尝试过使用 distinct on select.distinct.uniq.group 但我出现错误。

谢谢。

最佳答案

首先,我相信您的模型是“An Order has many OrderStatusDetail”。这就是为什么你的结果中有几个不同的name的原因。

因此您可以像这样修改查询:

    @orders = Order.joins(order_status_details: :order_status)
.order('id DESC, order_status_details.created_at DESC')
.where('order_status_details.id IN (SELECT MAX(id) FROM order_status_details GROUP BY order_id)')
.select("orders.id, order_status_details.status_id, order_statuses.name, order_status_details.created_at")

理想情况下,where条件用于仅选择order_status_details的期望id,例如我使用min_id,您可以修改它根据需要

关于mysql - 在连接查询中返回不同的记录 - Rails 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35116827/

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