繁体   English   中英

如果这等于 mysql 表中的 x,如何 select 只有最后一个匹配结果

[英]How to select only last matching result if this is equal to x from mysql table

我的 mysql 数据库中有三个表:

订单表(示例):

orders
id  | user_id | price
1   | 10       | 29.99
2   | 20       | 29.99
3   | 30       | 29.99
4   | 40       | 29.99

用户表:

users
id   | name   | surname
10   | mark   | white
20   | john   | long
30   | anders | red
40   | john   | smith

和 orders_updates 表

orders_updates
id | order_id | status_id | date
1  | 1        | 1         | 03/05/2020
2  | 1        | 2         | 04/05/2020
3  | 2        | 1         | 05/05/2020
4  | 3        | 1         | 06/05/2020
5  | 4        | 1         | 06/05/2020
6  | 4        | 2         | 06/05/2020

我需要的:

new orders
order_id | user_id | name   | surname
2        | 20      | john   | long
3        | 30      | anders | red

现在,我需要创建“新订单”页面(orders_updates.status_id = 1),我如何才能只获取只有 status_id=1 而不是其他一些 status_id 的订单。

这是我卡住的地方:

SELECT o.*, u.*
FROM orders o, users u, orders_updates ou
WHERE o.user_id = u.id
AND (SELECT MAX(ID) FROM order_updates WHERE order_updates.order_id = o.id)
AND ou.order_id = o.id

谢谢你们。

尝试以下

select
    order_id,
    user_id,
    name,
    surname

from orders_updates ou

join orders o
on ou.order_id = o.id

join users u
on u.id = o.user_id

where ou.status_id = 1

order by
    order_id

我会 go 与:

select
    order_id,
    user_id,
    name,
    surname

from orders_updates ou

join orders o
on ou.order_id = o.id

join users u
on u.id = o.user_id

where ou.status_id = 1
and ou.order_id not in (  
  select distinct order_id  
  from orders_updates  
  where status_id in (2,3)  
)  

order by
    order_id

我在 (2,3) 中放置了一个示例 status_id,但您应该在其中包含您不想考虑的所有其他 status_id。

希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM