搜尋

首頁  >  問答  >  主體

php - 用一條sql查詢出論壇每個版塊下的最新6個帖子

論壇版塊表:

#論壇貼文表:

#效果圖:

ringa_leeringa_lee2766 天前1017

全部回覆(5)我來回復

  • 给我你的怀抱

    给我你的怀抱2017-06-29 10:10:50

    參考這個

    回覆
    0
  • 为情所困

    为情所困2017-06-29 10:10:50

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

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

    回覆
    0
  • 淡淡烟草味

    淡淡烟草味2017-06-29 10:10:50

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

    回覆
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-29 10:10:50

    非要一條語句的話 用 union

    回覆
    0
  • 学习ing

    学习ing2017-06-29 10:10:50

    板塊很多的話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;

    回覆
    0
  • 取消回覆