当前位置:首页 » 编程语言 » 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框架