mysql實現users 表和 logoin_log表是一對多, 現在是把user的資訊找出來 關聯上一些 logoin_log表的資料, 因為a表是多的一方,要多他的資料進行一些條件匹配,這個sql目的是查出每個使用者的最新的log記錄
有的人建議進行表串連來進行篩選,不過那樣很麻煩,小濤我斷然拒絕了,然後我採用了另一個巧妙的方法:
列表的時候採用先查一個表,這裡查的是users表,然後再傳值到方法,該方法進行封裝查詢logoin_log,此時要通過id倒序排列,返回相應的值,這樣就可以獲得最新的log記錄了,這樣是不是更簡單呢,得意……堅決用表串連的盆友們,趕快試試這種方法吧。
users 表和 auth_token_log表是一對多, 現在是把user的資訊找出來 關聯上一些 auth_token_log表的資料, 因為a表是多的一方,
要多他的資料進行一些條件匹配
這個sql目的是查出每個使用者的最新的log記錄
原始寫法
代碼如下 |
|
SELECT users.first_name, users.email_address, users.tp_user_id, users.tp_username, auth_token_log.module_access, auth_token_log.created_date FROM users INNER JOIN auth_token_log ON users.id = auth_token_log.user_id WHERE auth_token_log.id in( SELECT max(id) FROM auth_token_log WHERE auth_token_log.user_id = users.id ) |
自己的理解
代碼如下 |
|
SELECT users.first_name, users.email_address, users.tp_user_id, users.tp_username, auth_token_log.module_access, auth_token_log.created_date FROM users INNER JOIN auth_token_log ON users.id = auth_token_log.user_id WHERE auth_token_log.id in( SELECT max(auth_token_log.id) FROM auth_token_log, users WHERE auth_token_log.user_id = users.id GROUP BY users.id ) |
對於原始寫法的理解是
先查出
代碼如下 |
|
SELECT × FROM users INNER JOIN auth_token_log ON users.id = auth_token_log.user_id |
的記錄, 然後針對每一行記錄X,拿出這一行X與 一個新的auth_token_log表做join,然後篩選出 log.user_id = x..user.id的所有記錄, 然後查出max(id), 這就是最新的log記錄的 id