Php SQL MAX和相同优惠券
我正在使用此sql行获取最新优惠券:Php SQL MAX和相同优惠券,php,sql,max,Php,Sql,Max,我正在使用此sql行获取最新优惠券: SELECT * FROM `coupons` WHERE `sku` = '123456' AND `id` IN (SELECT Max(id) FROM `coupons` GROUP BY coupon) ORDER BY `id` DESC LIMIT 3 它工作得很好,但在极少数情况下,当我在不同的sku上有相同的优惠券
SELECT *
FROM `coupons`
WHERE `sku` = '123456'
AND `id` IN (SELECT Max(id)
FROM `coupons`
GROUP BY coupon)
ORDER BY `id` DESC
LIMIT 3
它工作得很好,但在极少数情况下,当我在不同的sku上有相同的优惠券代码时,结果什么都不是
我怎样才能解决这个问题
谢谢试试这个:
SELECT c1.*
FROM `coupons` AS c1
INNER JOIN
(
SELECT coupon, MAX(id) AS LatestId
FROM `coupons`
where `sku` = '123456'
GROUP BY coupon
) AS c2 ON c1.coupon = c2.coupon AND c1.id = c2.LatestId
where c1.`sku` = '123456';
这样,内部查询将为每个优惠券
提供最大id,然后内部连接将删除除具有最大id的优惠券之外的所有优惠券
在使用谓词中的进行查询时,您正在比较外部查询中任何优惠券的最大id,而不仅仅是每个优惠券的最大id。为什么不这样做
SELECT c.*
FROM coupons c
WHERE c.sku = '123456'
ORDER BY id DESC
LIMIT 3 ;
当同一优惠券上的较高id属于其他sku时会发生这种情况,因此结果为0。我想我通过在“IN”中添加其中sku='123456'解决了这个问题