论坛首页 编程语言技术论坛

讨论个问题:网页上呈现一个简单的搜索结果列表,大家都是怎么实现的?

浏览 2080 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-27  
PHP
比如一个简单的基于数据库的图书搜索,可以按照书名,作者,出版社查询,查询结果可以分页显示,能支持缓存就更好了,想看看大家都是怎么实现的?
是用面向对象思想也好,基于过程也罢,自己写框架也行,用现成的框架也行,直接写sql语句也行,可能有n多种实现方法,我想大家都能贴出个基本架子出来,相互学习借鉴一下

我先抛砖引玉,贴出我的代码,大家提提意见,谢谢!


include_once($_SERVER['DOCUMENT_ROOT'] . '/logic/BookLogic.php'); 
include_once($_SERVER['DOCUMENT_ROOT'] . '/global/init.php'); //公共类库
$flush_cache = $_REQUEST['flushcache']; //强制刷新缓存/模板参数
$page  = intval($_REQUEST['page']) ? intval($_REQUEST['page']) : 1; //当前页码
$search = array(
    'bookname'   => $_GET['bookname'], //获取搜索参数
    'author'     => $_GET['author'],
    'publish'    => $_GET['publish'],
);
$memcacheKey = make_cacheid($search, 'page'); //生成缓存id
if ($flush_cache=='1' || !$content = MemcacheHandle::get($memcacheKey)) //检查缓存
{
    $num = 20; //每页条数
    $oBook = new BookLogic(); //创建对象
    $list = $oBook->getList($search, $num, $page); //获取列表
    if (PEAR::isError($list)){Message::showError($list);} //错误处理
    $links = page($num, $list['total']);  //分页
    $assign = array(
        "total"    => $list['total'],  //记录总数
        "prevpage" => $links['back'],  //前一页id
        "nextpage" => $links['next'],  //后一页id
        "pages"    => $links['pages'], //完整的分页链接
        "list"     => $list['data'],   //列表数据
    );
    $content = smarty_fetch($assign, 'booksearch.tpl', $flushcache); //smarty模板赋值
    MemcacheHandle::set($memcacheKey, $content, 1800); //设置缓存及过期时间
}
echo $content; //页面呈现


   发表时间:2008-11-28  
查询分页,我这样做,

先查一次总数
select count(*) from tablea where where...

再查一次结果
select a,b from tablea where where...
,
就可以了。

如果愿意,也可以适当缓存结果,

应该还可以通过服务端语言滚动结果集游标的办法来分页,但未试过。




0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics