mysql如何仅返回外表最新记录符合特地条件的内表记录?

现在有一个refund表,一个refund_trade表,是一对多关系

我想达到的效果是,展示所有的reufnd表的内容(即列表页),但是,如果传了success(对列表页进行筛选),则看这个refund对应的refund_trade的「最新」的记录是否为success,是的话,则返回对应的refund表的内容,否则的话,这个refund的记录不展示。原生sql语句怎么写呢?或者说用Laravel的whereHas应该怎么写呢?ps:菜鸟勿喷,望大神指教

阅读 1.7k
2 个回答

refund表冗余一个return_code字段不就完美解决?每次添加refund_trade表记录时更新refund表的状态.

SELECT
    `r3`.`refund_id`
FROM
    `refund` AS `r3`
JOIN
(
    SELECT
        `r1`.`refund_id`
    FROM
        `refund_trade` AS `r1`
    LEFT JOIN `refund_trade` AS `r2` ON
        `r2`.`refund_id ` = `r1`.`refund_id`
        AND `r1`.`id` < `r2`.`id`
    WHERE
        `r2`.`id` IS NULL
        AND `r1`.`return_code` = 'SUCCESS'
) AS `r4` ON
    `r4`.`refund_id` = `r3`.`refund_id`
LIMIT 0,15;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏