mysql一對多關聯查詢的時候篩選條件


mysql實現users 表和 logoin_log表是一對多, 現在是把user的信息找出來 關聯上一些 logoin_log表的數據, 因為a表是多的一方,要多他的數據進行一些條件匹配,這個sql目的是查出每個用戶的最新的log記錄
有的人建議進行表連接來進行篩選,不過那樣很麻煩,小濤我斷然拒絕了,然后我采用了另一個巧妙的方法:

列表的時候采用先查一個表,這里查的是users表,然后再傳值到方法,該方法進行封裝查詢logoin_log,此時要通過id倒序排列,返回相應的值,這樣就可以獲得最新的log記錄了,這樣是不是更簡單呢,得意……堅決用表連接的盆友們,趕快試試這種方法吧。

users 表和 auth_token_log表是一對多, 現在是把user的信息找出來 關聯上一些 www.111cn.net 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

更多詳細內容請查看:http://www.111cn.net/database/mysql/56892.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM