當前位置:首頁 » 編程語言 » thinkphp原生sql分頁
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

thinkphp原生sql分頁

發布時間: 2022-12-11 23:32:01

sqlsrv2008 的分頁問題 怎麼處理啊 thinkphp

thinkphp的分頁是可以自動區分分組名的,你檢查下獨立分組配置是不是有問題,配置文件中如下
'APP_GROUP_LIST' => 'Home,Admin',
'DEFAULT_GROUP' => 'Home',
'APP_GROUP_MODE' => 1,

❷ thinkphp 3.1 這個查詢怎麼進行分頁

一、首先需要在MsgManage控制器中加入分頁方法

知識點:
1、count函數的試用
2、Page類實例化操作及相關參數了解
3、limit函數了用
4、show函數了解
編輯文件admin/Lib/Action/MsgManageAction.class.php
代碼如下:

復制代碼代碼如下:

class MsgManageAction extends CommonAction {
public function index(){
import('ORG.Util.Page');
//import調用的是message/ThinkPHP框架目錄下的擴展包Extend/Library/ORG/Util/中的Page.class.php類文件
$count = M('board')->count();
//調用board庫,取出所有數據條數
$page = new Page($count ,10);
//實例化Page類,其中第一個參數為顯示條數的總數,每次取出十條,也就是下面$page->listRows的值
$limit = $page->firstRow . ',' . $page->listRows;
//$page->firstRow為查找的起始條數,默認為0,如果$page->listRows為10,那麼第2頁的$page->firstRow就為10,以此類推

$board = M('board')->order('time DESC')->limit($limit)->select();
//注意,這里較之前的版本添加了->limit($limit)
$this->board = $board;
$this->page = $page->show();
//將$page->show()通過show方法解析$page內容顯示並賦值給模板變數,供模板調用

$this->display();
}

Public function delete(){
$id = I('id','','intval');

if(M('board')->delete($id)){
$this->success('刪除成功',U('index'));
}else{
$this->error('刪除失敗');
}
}
}

show方法是3.1版本才有的一個新功能
ThinkPHP中頁面輸出的過程是讀取模板文件,然後進行模板解析(也支持調用第三方模板引擎解析),但是有一些情況,我們並沒有定義模板文件,或者把模板文件保存在資料庫裡面,那麼這個時候進行頁面輸出的時候,我們是無法進行模板文件讀取的,3.1版本則針對這樣的情況增加了內容解析輸出的功能。
內置的模板引擎也進行了完善,如果傳入的模板文件不存在的話,則會認為是傳入的模板解析內容,因此,3.1的View類和Action類也做了一些改進。
display方法用於模板文件渲染輸出,show方法則用於模板內容渲染輸出,並且show方法仍然支持內容解析功能
具體內容可參考:ThinkPHP3.1新特性 內容解析輸出
二、在模板文件中加入分頁模塊
知識點:
1、td單元格合並
2、$page變數調用顯示

編輯文件:admin/Tpl/MsgManage/index.html,加入一段tr用來顯示分頁相關,代碼如下:

復制代碼代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Message Board BackGround</title>
</head>
<body>
<table class="table" border="1">
<tr>
<th>ID</th>
<th>發布者</th>
<th>內容</th>
<th>發布時間</th>
<th>操作</th>
</tr>

<foreach name='board' item='b'>
<tr>
<td>{$b.id}</td>
<td>{$b.username}</td>
<td>{$b.content}</td>
<td>{$b.time|date='y-m-d H:i',###}</td>
<td><a href="{:U('admin.php/MsgManage/delete',array('id' => $b['id'])),''}">刪除</a></td>
</tr>
</foreach>

//新增tr代碼短
<tr>
<td colspan='5' align='center'>
//將5個單元格合並,並且居中顯示
{$page}
//顯示控制器中$this->page內容
</td>
</tr>
</table>
</body>
</html>

❸ thinkphp怎麼把倆個查詢的數據放在一個函數裡面

8附錄->8.4類庫參考->8.4.4Model類

8.4.4 Model類
getModelName() 獲取當前Model的名稱
getTableName() 獲取當前Model的數據表名稱
switchModel(type,vars=array()) 動態切換模型
table() 設置當前操作的數據表
field() 設置要查詢的數據欄位
where() 設置查詢或者操作條件
data(data) 設置數據對象
order(order) 設置排序
limit(limit) 查詢限制
page(page) 查詢分頁
join(join) 進行JOIN查詢
having(having) 進行having查詢
group(group) 進行group查詢
lock(lock) 查詢鎖定
distinct(distinct) 唯一性查詢
count(field) 記錄統計
sum(field) 總數查詢
min(field) 最小值查詢
max(field) 最大值查詢

avg(field) 平均值查詢
_initialize() 模型初始化方法
_facade(data) 對保存到資料庫的數據進行處理
_before_write(&data) 寫入數據前的回調方法 包括新增和更新
add(data='',options=array()) 新增數據
_before_insert(&data,options) 寫入數據前的回調方法
_after_insert(data,options) 寫入數據後的回調方法
selectAdd(fields='',table='',options=array()) 通過Select方式添加記錄
save(data='',options=array()) 更新數據到資料庫
_before_update(&data,options) 更新數據前的回調方法
_after_update(data,options) 更新成功後的回調方法
delete(options=array()) 刪除數據
_after_delete(data,options) 刪除成功後的回調方法
select(options=array()) 查詢數據集
_after_select(&resultSet,options) 查詢成功後的回調方法
findAll(options=array()) select方法的別名
_options_filter(&options) 表達式過濾回調方法
find(options=array()) 查詢數據
_after_find(&result,options) 查詢成功的回調方法
setField(field,value,condition='') 設置記錄的某個欄位值
setInc(field,condition='',step=1) 欄位值增長
setDec(field,condition='',step=1) 欄位值減少
getField(field,condition='',sepa=' ') 獲取某個欄位值
create(data='',type='') 創建數據對象

autoCheckToken(data) 表單令牌驗證

query(sql) 執行原生SQL查詢

execute(sql='') 執行原生SQL操作

startTrans() 啟動事務

commit() 提交事務

rollback() 事務回滾

getError() 獲取模型的錯誤信息

getDbError() 獲取資料庫的錯誤信息

getLastInsID() 獲取最後執行的SQL語句

getPk() 獲取主鍵名稱

getDbFields() 獲取數據表的欄位信息

regex(value,rule) 使用正則驗證數據

setProperty(name,value) 設置模型的屬性值

2.1版新增方法:

db(linkNum,config='') 切換當前資料庫連接

高級模型類AdvModel

topN(count,options=array()) 查詢滿足條件的前N個記錄

getN(position=0,options=array()) 查詢符合條件的第N條記錄

0 表示第一條記錄 -1 表示最後一條記錄

first(options=array()) 獲取滿足條件的第一條記錄

last(options=array()) 獲取滿足條件的最後一條記錄

returnResult(data,type='') 返回指定的數據類型

setLazyInc(field,condition='',step=1,lazyTime=0) 欄位值延遲增長

setLazyDec(field,condition='',step=1,lazyTime=0) 欄位值延遲減少

addConnect(config,linkNum=NULL) 增加資料庫連接

delConnect(linkNum) 刪除資料庫連接

closeConnect(linkNum) 關閉資料庫連接

switchConnect(linkNum,name='') 切換資料庫連接

patchQuery(sql=array()) 批處理執行SQL語句

getPartitionTableName(data=array()) 得到分表的的數據表名

❹ 原生sql轉thinkphp5寫法

TP的模型可以支持原生SQL操作,提供了query和execute兩個方法,為什麼原生SQL還要區分兩個方法呢,原因有兩個:
1、返回類型不同
query用於查詢,返回的是數據集,和select或者findall一樣,所以可以直接在模板裡面使用volist標簽輸出query的查詢結果
execute用於寫操作,返回的是狀態或者影響的記錄數
2、讀寫統計需要
為了便於統計當前的數據讀寫次數,把資料庫的讀和寫操作分開(對應的就是query和execute)

使用原生SQL很簡單,我們甚至不需要實例化任何的模型,例如:
$Model = new Model(); // 實例化一個空模型
下面的方法是等效的
$Model = D(); 或者 $Model = M();
// 下面執行原生SQL操作
$Model->query('select * from think_user where status=1');
$Model->execute('update think_user set status=1 where id=1');
如果你實例化了某個模型,仍然可以執行原生SQL操作,不受影響,例如:
$User = D('User');
$User->query('select * from think_user where status=1');
$User->execute('update think_user set status=1 where id=1');
在這種情況下面,我們可以簡化SQL語句的寫法,例如:
$User->query('select * from __TABLE__ where status=1');
$User->execute('update __TABLE__ set status=1 where id=1');
系統會自動把__TABLE__替換成當前模型對應的數據表名稱,實際的數據表由模型決定。

通常來說,我們都是使用原生SQL操作實現一些ORM和CURD比較難實現的操作,另外,如果SQL不復雜的話 原生SQL的效率和連貫操作的效率差別是微乎其微的,TP本身的ORM實現也是相當高效的。

❺ ThinkPHP使用心得分享-分頁類Page的用法

ThinkPHP中的Page類在ThinkPHP/Extend/Library/ORG/Util/Page.class.php中,所以使用前要引入Page類:
復制代碼
代碼如下:
import('ORG.Util.Page');
//Page類的引入
$db
=
M('abc');//實例化數據表abc
$where
=
array(
'id'=>'2';
);//條件語句$where,例表中欄位id的值為2
$count
=
$db->where($where)->count();//獲取符合條件的數據總數count
$page
=
new
Page($count,
10);//實例化page類,傳入數據總數和每頁顯示10條內容
$limit
=
$page->firstRow
.
','
.
$page->listRows;//每頁的數據數和內容$limit
$result
=$db->where($where))->limit($limit)->select();//分頁查詢結果
$this->result
=
$result;//賦值
$this->show
=
$page->show();//獲取分頁的底部信息
以上代碼是分頁類實現的基本語句,當然喜歡使用原生sql語句的朋友也可以配合原生sql語句實現查詢分頁:
復制代碼
代碼如下:

import('ORG.Util.Page');
//Page類的引入

$db
=
M('abc');//實例化數據表abc

$where
=
array(

'id'=>'2';

);//條件語句$where,例表中欄位id的值為2

$count
=
$db->where($where)->count();//獲取符合條件的數據總數count

$page
=
new
Page($count,
10);//實例化page類,傳入數據總數和每頁顯示10條內容

$Modle
=
new
Model();//實例化新數據模型

$sql
=
'select
id,name
from
abc
where
'.$where.'
limit
'.$page->firstRow.','.$page->listRows;//sql語句

$result
=
$Modle->query($sql);//執行sql語句

$this->result
=
$result

$this->show=$page->show();
當然,分布查詢獲取的內容也可以先對查詢完的數據進行處理再賦值,比如
復制代碼
代碼如下:

...

$result
=$db->where($where))->limit($limit)->select();//分頁查詢結果

$res
=
abc($result);//abc方法(自定義方法或php函數)對結果$result進行數據排序或重組處理等

$this->result
=
$res;//賦值

❻ 在thinkphp3裡面執行原生的sql語句分頁

原生SQL查詢有 query() 和 execute() 兩個方法:
query():用於 SQL 查詢操作,並返回符合查詢條件的數據集
execute():更新和寫入數據的 SQL 操作,返回影響的記錄數

public function read(){ // 實例化一個空模型,沒有對應任何數據表 $Dao = M(); //或者使用 $Dao = new Model(); $list = $Dao->query("select * from user where uid<5"); if($list){ $this->assign('list', $list ); $this->display(); } else { $this->error($Dao->getError()); }}

public function read(){ header("Content-Type:text/html; charset=utf-8"); // 實例化一個空模型,沒有對應任何數據表 $Dao = M(); //或者使用 $Dao = new Model(); $num = $Dao->execute("update user set email = '[email protected]' where uid=3"); if($num){ echo '更新 ',$num,' 條記錄。'; }else{ echo '無記錄更新'; }}

❼ 用thinkphp3.2.3做同一頁面兩個分頁時遇到的問題

給你一個分頁函數 看下 他翻頁的關鍵詞是 $_get['p'] 這個參數 你沒改 那就是誰先獲取到 誰就翻頁了 注意修改翻頁頁碼參數p

functionpage($model,$map=array(),$order='',$field=array()){
if(is_string($model)){
$model=M($model);
}
$limit=$_REQUEST['r']?$_REQUEST['r']:20;
$page=intval($_GET['p']);
//進行分頁數據查詢注意page方法的參數的前面部分是當前的頁數使用$_GET[p]獲取
$list=$model->where($map)->field($field)->order($order)->page("$page,$limit")->select();
session('sql',$model->getLastSql());
$data['count']=$count=$model->where($map)->count();//查詢滿足要求的總記錄數
$Page=newThinkPage($count,$limit);//實例化分頁類傳入總記錄數和每頁顯示的記錄數
$Page->setConfig('header','條數據');//共有多少條數據
$Page->setConfig('prev',"上一頁");//上一頁
$Page->setConfig('next','下一頁');//下一頁
$Page->setConfig('first','首頁');//第一頁
$Page->setConfig('last','尾頁');//最後一頁
$data['page']=$Page->show();//分頁顯示輸出
$this->assign($data);//賦值分頁輸出
return$list;
}

❽ thinkphp5原生查詢時,查詢結果怎麼分頁,具體代碼應該怎麼寫

造成這個錯誤的原因是 Db::query($sql)返回的是數組,解決方法:
$list = Db::table('procts')->field('id,name,price')->paginate(5);
視圖:
遍歷$list元素
分頁{$list->render()}

❾ 您好,thinkphp分頁我也遇到你的問題,點擊第二頁就查不到任何數據了

引入分頁類 ,然後實例化對象,然後裡面不是有個show()方法嗎,直接assign,limit注意要寫正確....

❿ 原生php和thinkphp這些框架有什麼區別

thinkphp等框架是 面向對象的mvc架構 mvc是目前主流的開發模式 框架是自己已經做好了這種架構開發者只需要寫業務代碼就可以了 而且框架一般會把一些常用的類提供給開發者 比如圖片處理 分頁類 驗證碼類 等等 框架還會把sql語句進行簡化 這些都是在提高開發者的開發效率 而如果使用原生php 開發者需要自己做mvc的架構 自己做單入口 開發效率以及代碼的可維護性都是不如直接使用那些主流的mvc框架