【问题标题】:How to display the latest Record [duplicate]如何显示最新记录[重复]
【发布时间】:2021-01-06 04:44:27
【问题描述】:

我只想显示来自 usersId 的最新记录。

我如何创建一个查询,以提供来自 usersId 的最新 ordersId?

表格如下所示:

这是我使用的查询,但它显示了所有的 ordersId:

SELECT * FROM `orders` WHERE usersId=?

【问题讨论】:

  • 如何定义“最新”行?请分享表结构、示例输入数据和预期输出。如果您添加了解决问题的尝试,那就更好了
  • @NicoHaase “最新订单ID”
  • @Dharman 这是否仅指每个 usersId 的最大 ordersId 值,或者这也可以以任何方式链接到 orderDate 列?假设 ID 按严格的升序分配是否安全?

标签: mysql sql


【解决方案1】:

您可以按如下方式使用LIMIT 子句:

SELECT * FROM `orders` WHERE usersId=? 
 order by orderdate desc limit 1;

或者你可以使用解析函数row_number如下:

select * from
(SELECT t.*, 
       row_number() over (partition by usersId order by orderdate desc) as rn 
  FROM `orders` t WHERE usersId=?) t
where rn = 1

row_number 解决方案在您想要多个usersid 的最新数据时很有用。

【讨论】:

  • 那么这两者有什么区别呢?
  • 如果你想要多个用户的最新数据usersId in (?,?,?)然后解析功能可以给出多个usersid的最新数据
【解决方案2】:

要获取最新的一条记录,请

  1. 按OrdersID降序排列,然后
  2. 使用 "limit 0, 1" 只获取 1 条记录

所以请改

SELECT * FROM `orders` WHERE usersId=?

SELECT * FROM `orders` WHERE usersId=? order by ordersId desc limit 0,1

【讨论】:

    【解决方案3】:

    您在将 $uid 设置为会话中的 user_id 之前绑定它,您应该先分配然后再绑定。

    $uid=$_SESSION['userid'];
    $stmt->bind_param("s",$uid);
    

    【讨论】:

    • 为什么会有任何不同?它通过引用进行绑定。
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 2023-01-07
    • 2019-12-20
    相关资源
    最近更新 更多