作者ckmarkhsu (深蓝站长)
看板PHP
标题Re: [请益] mysql 上一笔, 下一笔?
时间Wed Jun 14 13:52:33 2006
如果在页面产生时,直接将上一笔或下一笔的 ID 查询出来做成连结也可以
但其实要实践这个功能,未必「每次」读取页面都要去查询
可以做成用到时再去查即可:)
上一篇,可以做成 <a href="showthread.php?t=2345&goto=up">
下一篇,可以做成 <a href="showthread.php?t=2345&goto=down">
意即,goto 编号为 2345 这篇主题的下一篇或上一篇
程式中只要写个 switch 判断 goto 变数
再依据之前前辈所言之方法查询即可
这样就只有使用到此方式时才会 query
并不会每次执行页面都去 query 出上一笔与下一笔,可大幅减少运算
vBulletin 就适用此方式:)
※ 引述《postmaster (post master)》之铭言:
: 假设是 view.php?id=$id ,通常就是如下:
: 文章内容
: 上一笔 | 下一笔
: 这样至少要执行3次SQL查询。
: 当1万人次时,那就要3万次SQL查询,只为了制造出上一笔、下一笔的连结
: 当10万人次时,也就是30万次SQL查询了。
: 重点在於
: 辛苦制造出上一笔、下一笔的连结,使用者也不一定会去点它。
: 不管使用者会不会点选它,就已经事先「付出」了一定量的系统资源。
: 可以参考一下phpbb对於这种情形的处理。
: 虽然phpbb将原来需要3万次SQL查询、减为2万次、甚至1万次。
: 但呈现上还是有稍许bug
: 至於资料库取出几笔的部分。
: 可以采class套件的方式来实作。
: 不论是MySQL、MSSQL、Oracle ... 这些都是可以处理的。
--
台湾深蓝vBulletin技术论坛
http://www.twvbb.com
vBulletin 论坛系统,内建 「0 修改新增插件」「完整附件功能」
「无限深度子论坛」「进阶权限管理」「前台 AJAX 即时管理」 欢迎研究:)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.249.201
1F:推 andreli:这样点了上一篇或下一篇不是还会再query吗? 06/14 17:08
2F:推 postmaster:点了才会query、而非「未点前就必须query」 06/14 17:19
3F:推 andreli:所以我有点疑惑,这篇的作法在资源上会减少吗?谢谢指教 06/14 20:03
4F:推 ckmarkhsu:会,因为不是每次都查询,只有需要时才查询 06/14 23:48
5F:推 andreli:想请教goto=up那边怎麽判断? 06/15 08:21
6F:→ andreli:因为我想不出来有goto那参数,跟没有那参数有啥分别? 06/15 08:24
7F:→ andreli:因为我觉得按下那个连结都还是要query的,是吗? 06/15 08:25
8F:推 appleboy46:就是因为你按下那个连结才需要阿 你不按的话 还需要吗 06/15 21:37
9F:推 andreli:那这样的作法跟没有加goto的作法差在哪里? 06/15 23:17
10F:→ andreli:我感觉加了goto反而还比较浪费资源。请指教,因为不是很懂 06/15 23:18
11F:→ ckmarkhsu:如果不加 goto 就是要加上 &nid=xxx 意即下一篇文章的id 06/16 20:39
12F:→ ckmarkhsu:所以无论你是否需要用到此功能,都要放类 2 个 query 06/16 20:39
13F:→ ckmarkhsu:来查询上一篇与下一篇的 ID,但如果你用此方式 06/16 20:40
14F:→ ckmarkhsu:就只有要查询时才会用到,可大幅减少查询次数 06/16 20:40
15F:推 ckmarkhsu:小声说..在PHP版被m了五篇..结果一篇优文都没有T T XD 06/16 20:46
16F:推 sedc:我也是用ck大的方法,因为它不是在产生连结时就做查询,而是 08/07 00:34
17F:→ sedc:在按下时才查询,所以如果看了一万笔,就只会有一万次查询 08/07 00:35