MYSQL聯合查詢中GROUP_CONCAT、MAX、year使用

 

這個是昨天遇到的事瞭,是寫簡歷搜索器的時候遇到的,查閱瞭很多的資料,這裡記錄一下一些SELECT聯合查詢中遇到的一些問題並附帶解決辦法

首先上例子:

$sql=""; 

$sql.=" SELECT "; 

$sql.=" ".T_."person_info.personid, "; 

$sql.=" ".T_."person_info.personname, "; 

$sql.=" ".T_."person_info.sex, "; 

$sql.=" year(".T_."person_info.birthday) AS age, "; 

$sql.=" MAX(".T_."person_edu.education) AS xueli, "; 

$sql.=" ".T_."person_edu.school, "; 

$sql.=" GROUP_CONCAT(".T_."person_edu.`subject`), "; 

$sql.=" ".T_."person_info.shi1 "; 

$sql.=" FROM "; 

$sql.=" ".T_."person_info "; 

$sql.=" LEFT JOIN ".T_."person_edu ON ".T_."person_info.personid = ".T_."person_edu.personid "; 

$sql.=" WHERE 1=1 "; 

$sql.=" AND ".T_."person_info.personid = '".$autoid."' "; 

$sql.=" GROUP BY personid ";

 

GROUP_CONCAT()是MySQL數據庫提供的一個函數,通常跟GROUP BY一起用,將所有同personid的subject結果組成結果集,並用逗號分隔開,隻支持字符類型的字段,整數型須要特殊寫法,因為沒有研究,所以這裡不說瞭

MAX是在整數型中取最大值,這裡用於取最高學歷(學歷字典),GROUP BY一起用

year還有month,都是從時間類型中提取一部分,比如年份、月份,我這裡是從生日中提取年份好計算年齡(所謂一年又一年,年齡還是計算來的精確)

另外說一下GROUP BY,就是分組的意思,就是重復記錄隻顯示一條,比如說某個人的學歷信息,在數據庫裡面可能很多條,但是顯示在前臺的組合搜索結果中,那我就須要合並結果並且隻取最高的一條就OK瞭

本文出自 “金色豬子的PHP成長之路” 博客

You May Also Like