mysql中一對多關聯,獲取多表中最新一條資料

2021-10-07 08:19:03 字數 1775 閱讀 9573

因為專案中銷售人員對於學生要採取跟進操作,現在想要知道所有學生的最後一次跟進記錄以及時間,

解決方案有很多。先把錶結構貼出來。更多交流歡迎,join(「q_qun」,1071834648)

學生表

跟進表

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

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

3.使用group_concat配合substring_index

介紹下這兩個函式

group_concat

很多人都知道他是分組合併,但是可能對於他第二個排序引數應用不太多。列出詳細的使用

group_concat( [distinct] 要連線的字段 [order by 排序字段 asc/desc ] [separator 『分隔符』] )

這裡就是先根據時間排序,把所有時間從大到小拼接起來,用指定分割符隔開,預設為逗號隔開,如果你要合併的字串中你確定了不會有特殊字元,你就可以指定某個特殊字元隔開。

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的情況了。

實現思路

先分組拼接,把大的放在第乙個,然後用指定字串分割,取第乙個,特別注意分割的字串一定是保證不會出現在需要分組拼接的字串中,否則會導致資料不準確。

最終效果

查詢這個跟進的詳情

附上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

byf.student_sell_id

hibernate 一對多關聯

雖然老師說不提倡使用一對多的對映,一般情況下推薦使用多對一設定實現,他們的效果是一樣的,但是我們還是簡單的講了一點實現方法,以後估計很少用吧,記到這吧,說不定不用很快就想不起來了 現在定義了兩個bean,乙個是hospital,另外乙個叫做doctor.在hospital中的屬性為 private ...

mysql 一對多關聯查詢 練習

場景 假設乙個學生有多門課程,一門課程有多個學生 雖然兩者是多對多關係,但本次假設為一對多 學生表 insert into student values 1 張三 66 3 insert into student values 2 李四 77 3 insert into student values...

Android ormlite 一對多關聯對映筆記

上次看到有人說道android query框架 查了一下資料 真是好用阿。然後又看到推薦了解ormlite 今天又去看了下ormlite 第乙個當然是實驗關聯映 然後發現它的一對多實現好像跟hibernate的使用不太一樣 記錄下來。等下再看看多對多怎麼實現的。先建立public class cus...