mysql中一對多關聯,獲取多表中最新一條數據

背景

因爲項目中銷售人員對於學生要採取跟進操作,現在想要知道所有學生的最後一次跟進記錄以及時間,
解決方案有很多。先把表結構貼出來。更多交流歡迎,join(“q_qun”,1071834648)
學生表
在這裏插入圖片描述
跟進表
在這裏插入圖片描述

解決方案

1.先查出學生表中所有學生,然後遍歷去查詢(php中foreach中查詢),簡單,但是效率很低。

2. 先排序然後在調用子查詢在已經排序好的裏面取,麻煩,效率也不高。

3.使用GROUP_CONCAT配合SUBSTRING_INDEX

介紹下這兩個函數

  1. GROUP_CONCAT
    很多人都知道他是分組合並,但是可能對於他第二個排序參數應用不太多。列出詳細的使用
    group_concat( [distinct] 要連接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )
    這裏就是先根據時間排序,把所有時間從大到小拼接起來,用指定分割符隔開,默認爲逗號隔開,如果你要合併的字符串中你確定了不會有特殊字符,你就可以指定某個特殊字符隔開。
  2. SUBSTRING_INDEX
    按關鍵字截取字符串,用法如下:
    substring_index(被截取字段,關鍵字,關鍵字出現的次數),可能對於第三個參數不太清楚,這裏詳細說一下用count代表第三個參數:
    返回一個 str 的子字符串,在 delimiter 出現 count 次的位置截取。
    如果 count > 0,從則左邊數起,且返回位置前的子串;
    如果 count < 0,從則右邊數起,且返回位置後的子串
    舉例: 如果字符串爲 aaaaa,bbbbbb,cccccc 如果count=1,那麼返回的值爲aaaaa,相當於分割後的第一個元素,如果爲2,就是aaaaa,bbbbbb。同理就可以參照php中的substr中-1索引就可以理解count<0的情況了。
  3. 實現思路
    先分組拼接,把大的放在第一個,然後用指定字符串分割,取第一個,特別注意分割的字符串一定是保證不會出現在需要分組拼接的字符串中,否則會導致數據不準確。

最終效果
在這裏插入圖片描述
查詢這個跟進的詳情
在這裏插入圖片描述
附上mysql代碼:

SELECT
	s.id,student_name,
  @a:=SUBSTRING_INDEX(GROUP_CONCAT(f.create_time ORDER BY f.create_time DESC),",",1) as follow_content,
  SUBSTRING_INDEX(GROUP_CONCAT(f.remark ORDER BY f.create_time DESC),",",1) follow_content
FROM
	rms_student_sell s,
	rms_student_sell_follow f
WHERE
	f.student_sell_id = s.id
  and f.student_sell_id=5348
GROUP BY
f.student_sell_id
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章