mysql 查询的问题

有一个这样的查询

用户表中的部分数据需要取到,同时去查询次用户最近一次充值的时间。求推荐思路 不想用循环。

正常做法是:先查询出所有的用户列表,然后循环这个数组 循环中查询此用户最后一次充值的时间追加在数组的末尾 
求效率高的处理方法
阅读 2.9k
4 个回答

用户表 users :

id     phone 
主键   用户手机号(唯一)

用户充值表 recharges : 同一个用户多条记录

phone      createdAt
关联用户    充值时间

SELECT phone, max(createdAt) FROM recharges where phone in (SELECT phone FROM users) GROUP BY phone

新手上路,请多包涵
select A.user表字段 ,(select max(B.recharge_time) from recharge as B where B.关联id=A.keyId) as rechargeTime from user as A

借楼上的两张表一用,sql可以采取左连接:

select 
    u.phone,
    r.createdAt
from
    user u
    left join recharges r on u.phone = r.phone
where
    u.phone = ''
    and r.createdAt in (
        select max(createdAt) from recharges
    )
group by u.phone

类似于这种思路,不过那个sql的in性能不是很好,这里可以再稍微优化下

用max(充值时间),但也是把循环交给了DB处理了。
题住要是业务允许,可否考虑在用户表新维护一个字段呢,记录最近一次充值时间,这样牺牲插入效率,提高了检索效率。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题