⑴ 如何用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
這樣就取出記錄的最後一條記錄。