findSql分页码问题

#1 tphpn

以下代码:
                $v= spClass("Vol_ItemList");
                $rs                = $v->spPager(2, 2)->findSql("select * from Vol_ItemList");
                $this->pager = $v->spPager()->getPager();

数据库中该表的记录有7条,从SQL Profiler中得知构造的SQL语句为:
SELECT * from  ( SELECT TOP 2 * from  ( SELECT TOP 4 * from Vol_ItemList  ) AS SPTMP_MSSQL_TOTLERESULT  ) AS SPTMP_MSSQL_ALLRESULT
从SQL语句看,没有order by 等关键词,所以得出的记录只有前面两条,而不会第3,4条;
而使用findAll却能自动的构造出来,请帮忙看一下;

2013-04-12 16:36:35

#2 jake

不明白看什么

2013-04-12 16:57:56

#3 tphpn

看一下为什么使用findSql不能查询出当前页的记录

2013-04-12 17:13:53

#4 tphpn

构造的SQL:
SELECT * from  ( SELECT TOP 2 * from  ( SELECT TOP 4 * from Vol_ItemList  ) AS SPTMP_MSSQL_TOTLERESULT  ) AS SPTMP_MSSQL_ALLRESULT
这个的结果只会有记录1,2;如果想得到记录3,4 SQL应为:
SELECT * from  ( SELECT TOP 2 * from  ( SELECT TOP 4 * from Vol_ItemList  order by DZID ) AS SPTMP_MSSQL_TOTLERESULT  order by DZID DESC ) AS SPTMP_MSSQL_ALLRESULT

但为什么构造的SQL不是这样的呢?

2013-04-12 17:19:21

#5 jake

tphpn 发表于 2013-4-12 17:19
构造的SQL:
SELECT * from  ( SELECT TOP 2 * from  ( SELECT TOP 4 * from Vol_ItemList  ) AS SPTMP_MSSQ ...
findAll要加order by的字段

2013-04-12 17:41:53

#6 tphpn

不好意思,可能是我没说清楚或没理解到;
findAll在使用过程中,是没有问题的,它会自动构造以关键字的order by 字段;
但findSql 我在不加order by字段情况下,不能查询到正确的记录,如果我加了order by 系统又会提示order by 错误;
怎么回事?

2013-04-15 09:15:12

#7 jake

findSql不能处理太复杂的分页,还是自己构造分页数据吧。

2013-04-15 09:25:12

#8 tphpn

哦这样啊,
select * from Vol_ItemList;这个查询应该不算复杂吧.

2013-04-15 09:56:49

#9 jake

tphpn 发表于 2013-4-15 09:56
哦这样啊,
select * from Vol_ItemList;这个查询应该不算复杂吧.
MSSQL的,算limit非常麻烦

2013-04-15 11:19:23

#10 tphpn

明白了,多谢jake 耐心解答

2013-04-15 11:43:53