1. 程式人生 > 其它 >MySql一對多,查詢最新資料

MySql一對多,查詢最新資料

ySql一對多,查詢最新資料

場景1:比如有一張學生資訊表,還有一張日誌表,每次修改了學生資訊便會在日誌表中插入一條更新日誌,現在需要查詢出所有學生的最新的一條更新記錄

SELECT
	log. * 
FROM
	`system_log` AS log
	INNER JOIN `student` AS t ON log. student_id = t. student_id
	INNER JOIN ( SELECT student_id, max( create_dae ) AS createDate FROM system_log GROUP BY student_id ) `maxTab` ON log. student_id = maxTab. student_id 
	AND `log`. create_dae = `maxTab`. createDate 
WHERE
	`log`. student_id IS NOT NULL 
	AND `log`. student_id != '' 
	AND t. student_id IS NOT NULL 
	AND t. student_id != '' 
ORDER BY
	`log`. create_dae DESC 
	LIMIT 100
    1. 先通過子查詢查詢出來 log表中 每個student對應的最大的建立時間,也就是最新的那一條日誌記錄,是需要根據student_id進行分組查詢的,這樣子就可以查詢出來每一個學生的最新的日誌記錄
  • 2.通過 inner join 進行表關係關聯,log表和student表進行關聯,查詢出每一個學生對應的所有日誌,在於子查詢出來的臨時表進行關聯,進而篩選出每一個學生對應的最新的一條日誌記錄,最後進行倒序排列和分頁造作即可

場景二:如果這條sql查詢語句已經無法在進行優化的情況下,應該如何再進行效率的提高?

  • 修改表結構,如果資料量不大的情況下,可以每次更新日誌的時候將最新的一條日誌結構同步更新到student表中即可
  • 增加表,可以新增一張表專門用來儲存最新的日誌記錄,每次插入日誌表的時候,對該表進行同步更新

場景三:優化遇到瓶頸了,還有其他優化方案嗎?

  • 引入Redis快取:每次插入日誌表的時候,向redis中增加最新記錄的環境以提高查詢效率