findSql分页码问题
发布于:2022-01-17 09:50:54
#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