這個是昨天遇到的事了,是寫簡歷搜索器的時候遇到的,查閱了很多的資料,這裡記錄一下一些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成長之路” 博客