鍍金池/ 問答/PHP  數據庫/ mysql 查詢的問題

mysql 查詢的問題

有一個這樣的查詢

用戶表中的部分數據需要取到,同時去查詢次用戶最近一次充值的時間。求推薦思路 不想用循環(huán)。

正常做法是:先查詢出所有的用戶列表,然后循環(huán)這個數組 循環(huán)中查詢此用戶最后一次充值的時間追加在數組的末尾 
求效率高的處理方法
回答
編輯回答
念初

借樓上的兩張表一用,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性能不是很好,這里可以再稍微優(yōu)化下

2018年8月11日 15:47
編輯回答
尐潴豬

用max(充值時間),但也是把循環(huán)交給了DB處理了。
題住要是業(yè)務允許,可否考慮在用戶表新維護一個字段呢,記錄最近一次充值時間,這樣犧牲插入效率,提高了檢索效率。

2017年6月17日 00:29
編輯回答
刮刮樂

用戶表 users :

id     phone 
主鍵   用戶手機號(唯一)

用戶充值表 recharges : 同一個用戶多條記錄

phone      createdAt
關聯用戶    充值時間

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

2017年7月13日 18:24
編輯回答
懶洋洋
select A.user表字段 ,(select max(B.recharge_time) from recharge as B where B.關聯id=A.keyId) as rechargeTime from user as A
2017年6月30日 09:13