扫码关注官方订阅号
84669人学习
65727人学习
82984人学习
467778人学习
498837人学习
471966人学习
256484人学习
152542人学习
224170人学习
139536人学习
81804人学习
85022人学习
11944人学习
20001人学习
60816人学习
5487人学习
15007人学习
2150人学习
6980人学习
194925人学习
359900人学习
1142人学习
19058人学习
3206人学习
180550人学习
48569人学习
17603人学习
40936人学习
1049人学习
750人学习
32909人学习
论坛版块表:
论坛帖子表:
效果图:
ringa_lee
参考这个
一条SQL语句做不到的,建议循环遍历所有版块,每个版块用 SELECT ... WHERE fid = ? ORDER BY dateline LIMIT 6 得到最新6条帖子,为提高效率,(fid, dateline)可以做成复合索引。
SELECT ... WHERE fid = ? ORDER BY dateline LIMIT 6
(fid, dateline)
另外,用一条SQL语句查出每个版块最新的1条帖子,是能实现的,但不是件容易的事,试试看吧 :-)
用union,然后(fid, dateline)加上联合索引
非要一条语句的话 用 union
union
板块很多的话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;
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
精品班
技术支持
技术咨询
学习群
会员优惠
返回顶部
参考这个
一条SQL语句做不到的,建议循环遍历所有版块,每个版块用
SELECT ... WHERE fid = ? ORDER BY dateline LIMIT 6
得到最新6条帖子,为提高效率,(fid, dateline)
可以做成复合索引。另外,用一条SQL语句查出每个版块最新的1条帖子,是能实现的,但不是件容易的事,试试看吧 :-)
用union,然后(fid, dateline)加上联合索引
非要一条语句的话 用
union
板块很多的话union比较麻烦,下面一条sql可以得到结果
如果你的tid和dateline顺序一致的话可以这么写:
顺序不一致就用下面的:
··························分割线···································
补充一下,还可以引入组内行号,好像更简便一些: