php - 用一條sql查詢出論壇每個版塊下的最新6個帖子
ringa_lee
ringa_lee 2017-06-29 10:08:50
0
5
972

論壇版塊表:

#論壇貼文表:

#效果圖:

ringa_lee
ringa_lee

ringa_lee

全部回覆(5)
给我你的怀抱

參考這個

为情所困

一條SQL語句做不到的,建議循環遍歷所有版塊,每個版塊用SELECT ... WHERE fid = ? ORDER BY dateline LIMIT 6 得到最新6條帖子,為提高效率,(fid, dateline) 可以做成複合索引。

另外,用一條SQL語句查出每個版塊最新的1條帖子,是能實現的,但不是件容易的事,試試看吧 :-)

淡淡烟草味

用union,然後(fid, dateline)加上聯合索引

扔个三星炸死你

非要一條語句的話 用 union

学习ing

板塊很多的話union比較麻煩,下面一條sql可以得到結果
如果你的tid和dateline順序一致的話可以這麼寫:

select * 
from t_tbl a
where 
    (select count(1) 
     from t_tbl b
     where b.fid=a.fid and a.tid>b.tid)<6 
order by fid,tid;

順序不一致就用下面的:

select aa.* 
from 
    (select fid,tid,title,content,dateline,(@rownum:=@rownum+1) rn 
     from t_tbl,(select @rownum:=1) a 
     order by fid,dateline) aa 
where 
    (select count(1) 
     from 
         (select fid,tid,title,content,dateline,(@rownum:=@rownum+1) rn 
          from t_tbl,(select @rownum:=1) a 
          order by fid,dateline) bb 
     where bb.fid=aa.fid and aa.rn>bb.rn)<6;

··························分割線······················· ··············
補充一下,還可以引入組內行號,好像更簡單一些:

select 
    fid,title,content,dateline 
from (
    select 
        @gn:=case when @fid=fid then @gn+1 else 1 end gn,
        @fid=fid fid,
        title,
        content,
        dateline
     from t_tbl,(select @gn:=1) a
     order by fid,dateline) aa
where gn<7;
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板