$joinTable = 'reserve';
$where = "reserve.size>'45'";
$productM = M('product');
$tempSQL = $productM->alias('p')
->field('p.ProductId,p.name,p.mainPic,p.priceN,p.priceVIP,p.isNew,p.isHot,p.sales,p.salesF')
->join("$joinTable ON $joinTable.ProductId = p.ProductId")
->distinct(true)
->where( $where )
->order('salesF DESC');$count = $tempSQL->count(); // 查询满足要求的总记录数$Page = new \Think\Page($count,$countPerPage);
$list = $tempSQL->page($nowPage.','.$Page->listRows)->select(); //查询结果集 但却发现,查询出来的结果集并非是经过筛选的,而是全部的产品列表。而把前面的$count = $tempSQL->count(); 注释掉时,查询出来的结果就是经过筛选的。可以看得出来 $tempSQL 在被使用了一次之后就被复原了。查看TP3.2的用户手册“连贯操作”那一章可以看到有下面这一句:连贯操作通常只有一个参数,并且仅在当此查询或者操作有效,完成后会自动清空连贯操作的所有传值(有个别特殊的连贯操作有多个参数,并且会记录当前的传值)。简而言之,连贯操作的结果不会带入以后的查询。
所以解决方案就是把$tempSQL这个对象复制一份,
$tempSQL2 = clone $tempSQL;
$count = $tempSQL->count();
$Page = new \Think\Page($count,$countPerPage);
$list = $tempSQL2->page($nowPage.','.$Page->listRows)->select(); 最佳答案