Mysql查询没有给出确切的记录

时间:2017-08-22 05:23:05

标签: php mysql sql mysqli

我想要针对每个用户和产品ID的唯一记录。所以我的查询工作正常,但是一个小问题是,我没有得到订单ID的列的确切值。

select max(o.id) as order_id, u.email,oi.product_id, DATE_FORMAT(FROM_UNIXTIME(o.paid_time), '%Y-%m-%d') as paid_times  
from `order` o 
join `users` u on u.id = o.user_id 
join order_item oi on oi.order_id = o.id 
where oi.product_id in (1212,1213)
group by u.email, oi.product_id
order by o.id desc;

尝试 - 2

select max(o.id) as order_id, u.email,oi.product_id, DATE_FORMAT(FROM_UNIXTIME(o.paid_time), '%Y-%m-%d') as paid_times  
from `order` o 
join `users` u on u.id = o.user_id 
join order_item oi on oi.order_id = o.id 
where oi.product_id in (1212,1213) and o.id IN (SELECT max(id) FROM `order`)
group by u.email, oi.product_id
order by o.id desc;

我获得了最大订单ID,这很好。但paid_time不是此订单ID。

当前结果:

enter image description here

期望的结果:

enter image description here

1 个答案:

答案 0 :(得分:0)

这是一种非常常见的错误类型。首先,您需要获取最大订单ID,而不是使用它在where条件中使用select和其他列的最大值mysql为您提供最大订单ID和首先出现的任何行数据,而不是与max id相关的数据。

了解以下示例

SELECT name
FROM table 
WHERE id=(
    SELECT max(id) FROM table
    )
上面的

将为您提供表格中的max(id)数据

 SELECT name , max(id)
    FROM table 

上述查询将显示最大ID但不匹配名称

http://www.plus2net.com/sql_tutorial/sql_max.php