本人用ThinkPHP3.2,今天正在開發(fā)一個(gè)需要分組顯示的功能,可是從數(shù)據(jù)庫中把相應(yīng)數(shù)據(jù)讀取后直接用group分組,結(jié)果每組顯示的是最老的記錄,我的需求是要顯示每組的最新記錄。在網(wǎng)上大搜一翻后,未果,本人決定自行研究,現(xiàn)將方法記錄于此以防遺忘。
成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括信豐網(wǎng)站建設(shè)、信豐網(wǎng)站制作、信豐網(wǎng)頁制作以及信豐網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,信豐網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到信豐省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
其實(shí)很簡單,以供就兩步:
第一步:
將符合條件的數(shù)據(jù)全部取出,暫不用group分組,作為子查詢:
[php]?view plain?copy
$subQuery?=?$model-field('id,name')-table('tablename')-where($where)-order('time?desc')-select(false);
第二部:
利用子查詢進(jìn)行查詢分組
[php]?view plain?copy
$model-table($subQuery.'?a')-group('field')-select();span?style="font-family:?Arial,?Helvetica,?sans-serif;"?/span
好了,思路就是這樣。希望對(duì)大家有幫助!
M("Table')-group("date")-select();
如果你每一行數(shù)據(jù)都要顯示,就應(yīng)該用order:
M("Table")-order("date")-select();
$tab=100; 每個(gè)顯示多少
$total=一共多少。(select cout(*) from xx);就可以
$page=ceil($total/$tab)需要幾頁,比如一共10個(gè),每頁3個(gè)就是10/3=3.....1,所以ceil向上取整10/3=4頁
$nowPage=0;
然后select * from xx limit $nowPage*$tab,$tab;就可以取出相應(yīng)的了
第一個(gè) 就是0,0*100然后取100條,就是1-100;
然后1*100,再取100條,就是 101-200;
分組查詢?cè)矶际荢QL的分組查詢,THINKPHP中只是用到他自己的一些自定義的方法!比如 join()、group()、having()方法等,實(shí)際對(duì)應(yīng)的也是SQL里的這些關(guān)鍵字!
例如本次需求是要按照cid進(jìn)行分組,按照通常的做法是 SELECT * FROM 表名 GROUP BY cid,這樣就能按照cid進(jìn)行分組篩選!然后使用THINKPHP的時(shí)候則使用 M('表名')-group('cid')-select(); 實(shí)際生成的語句和原始SQL代碼是一樣的。
要是只顯示一個(gè)的話 用 array_unique() 函數(shù) 去除數(shù)組的重復(fù)項(xiàng)就行了
要是都顯示的話 用 rsort 或 sort 之類的函數(shù)對(duì)數(shù)據(jù)排序
愚見:
用函數(shù)explode(",",$hq_str_sh601006)
能把字符串按照逗號(hào)分開??梢灾苯淤x值給一個(gè)數(shù)組變量。
如:$hq_str_arr=explode(",",$hq_str_sh601006);
然后你自己可以從數(shù)組中按照你獲取的順序給數(shù)組中相應(yīng)的元素賦值給數(shù)據(jù)庫的對(duì)應(yīng)字段。
希望有幫助。