⑴ 如何用sql,实现做翻页
1、首先获取总数据条数 select count(id) from table
2、然后根据总数获取总页数
3、根据ajax传递参数,page,size
sql语句如下
select * from table limit (page-1) * size , size
描述较为简略,如有疑问可追答
⑵ yii2.0获取到最后一条执行的sql怎么看
这个有很多种方法
1. yii有提供一个getRawSql方法 比如说一个查询
$query=User::find();
$query->select(['username','age'])->where(['id'=>1)->one();
echo$query->createCommand()->getRawSql();//输出sql语句
2.可开启yii2的debug模块,这个功能很强大,在里面可以查到当前页面所有的sql信息,具体配置方法自行网络,网上太多这个配置了
3.查找Yii源码 随便找个模型调用原生的方法 比如 User::updateAll 方法,通过编辑器定位到updateAll方法的源码 你会发现下面一段代码
publicstaticfunctionupdateAll($attributes,$condition='',$params=[])
{
$command=static::getDb()->createCommand();
$command->update(static::tableName(),$attributes,$condition,$params);
return$command->execute();
}
继续定位execute方法
publicfunctionexecute()
{
$sql=$this->getSql();
$rawSql=$this->getRawSql();
Yii::info($rawSql,__METHOD__);
if($sql==''){
return0;
}
$this->prepare(false);
$token=$rawSql;
try{
Yii::beginProfile($token,__METHOD__);
$this->pdoStatement->execute();
$n=$this->pdoStatement->rowCount();
Yii::endProfile($token,__METHOD__);
$this->refreshTableSchema();
return$n;
}catch(Exception$e){
Yii::endProfile($token,__METHOD__);
throw$this->db->getSchema()->convertException($e,$rawSql);
}
}
方法里$rawSql就是最原生要执行的sql拉,在这里打断点输出就ok
个人推荐第二种方法,最方法最高效,具体配置方法自己网络,很简单!
⑶ 请问下sqlserver2008分页语句怎么写
1、这种SQL分页语句,是用正反向排序的原理写:
先按你需要的排序,取到你要的页数的数据;再从其中按倒序取,每页要显示多少行就取多少个。这样取出的就是需要的数据;再按需要的排序重新排下序就是所要取的第n页的数据了;
然后要取的页数用参数传递,就可以按参数取任意页的数据集。
2、这种做法的缺陷是:
用来排序的字段必须是关键数据集,即能唯一确定数据行的字段集;排序字段相同的数据行有多个的话,则这几行之间的排序会有问题;
3、排序字段是关键数据集的话,不用说了,直接用现有字段实现就是;参照加行号的语句,去掉rownum,按你自己的字段写order子句 替换rownum的排序就是;而且最内层还可以去掉一层子查询;
4、排序字段不是关键数据集的话,需要加个行号字段,作为排序字段:从1开始,递增1个的顺序(1、2、……);2008的话,支持row_number(),就好办多了,否则就只好自己控制生成一个序列字段,再合并到数据集上了。
5、加个行号字段的语句具体如下,其中具体表、字段,按你自己的实际情况代换下:
declare @iPage int --所取的页的序数 (第几页)
declare @iPageNum int --所取的数据行数(除最后一页外,每页所取的行数应该都是一样的)
declare @iRecordNumber int --取@iPage页时,结尾记录所在行数
declare @iRecordCount int --总记录行数
--变量初始化
set @iPage=2 --可用参数传递
set @iPageNum=10 --默认每页取10行
set @iRecordNumber=@iPage*@iPageNum
select @iRecordCount=count(任意字段,最好不要用*) from 你取数据的表
--取最后一页时,重算结尾所在行数(@iRecordNumber)、所取记录数(@iPageNum)
if @iRecordNumber>@iRecordCount
begin
set @iRecordNumber=@iRecordCount
if (@iRecordNumber%@iPageNum)>0
set @iPageNum=@iRecordNumber%@iPageNum
end
declare @strSQL varchar(max)
set @strSQL='select * from ('
set @strSQL=@strSQL + 'select top '+ convert(varchar(5),@iPageNum) +' * from('
set @strSQL=@strSQL + 'select top '+ convert(varchar(7),@iRecordNumber) +' * from'
set @strSQL=@strSQL + '('
set @strSQL=@strSQL + 'select row_number()over(order by 你需要的排序字段及正反序)as RowNum,*from 你取数据的表'
set @strSQL=@strSQL + ') a order by rownum'
set @strSQL=@strSQL + ') b order by rownum desc'
set @strSQL=@strSQL + ') c order by rownum'
exec(@strSQL)
⑷ SQL语句查询最后两条记录怎么写
用的SQL代码块实现,声明一点这是假分页查询技术,我是先把全部信息查出,然后只显示了最后两行记录;
DECLARE
V_count NUMBER;
CURSOR cur_emp IS SELECT rownum nu,e.* FROM emp e;
BEGIN
SELECT COUNT(*) INTO v_count FROM emp;
dbms_output.put_line('查出一共多少行记录:'||v_count) ;
FOR e IN cur_emp LOOP
IF (e.nu>(v_count-2))THEN
dbms_output.put_line('这是记录序号:'||e.nu||' 这是记录内容:'||e.sal);
END IF;
END LOOP;
END;
1、emp是所要查询的表
2、不知道过滤条件因此我是全部查询count(*),可以跟据实际条件改动
⑸ SQL语句自带的分页,就是最后between 1 and 20这样的。现在要导出到excel,但因为记录比较多,百万级的
select Field1,Field2 from table with(nolock)再加个索引就会快一些,
不想再查询的话放到内存里面,第二次再从内存里面拿数据
⑹ MS SQL 查询最后5条记录,该如何操作。
数据表要有规律,比如按照时间自增或者有记录创建时间,
以有自增列为例:
selecttop5*fromtb
orderbyIDdesc--排序,后面往前排,再是使用TOP5提取前5条数据
⑺ 在PHP中使用SQL语句 怎么取出查询出来的最后一个数据
在PHP中使用SQL语句可以通过倒序排列记录取出第一条的记录取到最后一条数据。
一般,php调用mysql的接口查询,查询语句如下:
select * from table order by id DESC limit 1
这样就取出记录的最后一条记录。