一个可查询所有表的“通用”查询分页类
查询 一个 所有 分页 通用
2023-06-13 09:13:43 时间
一个可查询所有表的“通用”查询分页类
最近突发奇想,希望写出一个可以针对所有表的查询分页类。因为在实际的开发中,恐怕查询并将结果集分页显示是用得最多的代码,而表的结构是多样的,我想尽可能地提高代码的重用率和维护性。
以下是我写的,请各位加以指点,测试,看能否进行更好的改进和更多的支持。
目前还只支持单一的表,不支持联合查询。但未来可以会考虑如何支持。
代码:
<?php
/****************************************************************
这个类主要是解决针对很多表的简单数据查询,还在完善中。希望广大网友多提意见和建议。
我的目的是开发出一个几乎可以适用于所有mysql表的查询并将结果集分页的类。
可以自动识别查询中要显示的字段值。
在此,特别声明,要感谢chinaunix的朋友,特别是PHP版的网友们长期以来给我的帮助。
特别要提的是NightKids,一直以来,他都给了我无私的帮助,甚至是他的源代码。
这个类可以被任何人自由引用,使用,修改。但请保留这段文字。
使用这个类造成的一切损失,都与作者tonera无关。
我还在考虑,对于一些复杂的联合查询,可以派生一个类,重新构造sql实现。
这个类没有考虑更多的显示风格,你可以自己构造。
*****************************************************************/
classbrowser{
var$c_table; //要查询的表名
var$c_rows; //要显示的行数
var$c_lation; //查询的条件
var$c_order; //排序的条件
var$c_result; //查询的数据连接句柄
var$c_query; //最终构造的查询
var$c_found; //结果集
var$c_error; //错误收集器
var$c_offset; //分页显示的偏移量
var$total; //结果集的总数
//连接数据库
functionconnect(){
include"../connect.inc.php";
if($connection==false){
$this->c_error.="没有连接上数据库。<br>";
exit;
}
$this->c_result=$connection;
}
//构造函数,初始化变量
functionbrowser($tablename,$row,$sql,$lation,$orderby){
$this->c_table=$tablename;
$this->c_rows=$row;
if(empty($this->c_offset)){
$this->c_offset=0;
}
if(empty($tablename)orempty($row)orempty($sql)){
$this->c_error="没有查询的表或没有批定显示多少行或没有查询语句<br>";
}
$this->c_query=$sql;
if(!empty($lation)){
$this->c_query.="".$lation;
}
if(!empty($orderby)){
$this->c_query.="".$orderby;
}
}
//计算总页数
functionTatolPage(){
$sult=mysql_query("selectcount(*)as"total_rows"from$this->c_table",$this->c_result);
if($sult==false){
$this->c_error.="计算结果集总数目的查询失败,请检查。<br>";
exit;
}
$tempvar=mysql_fetch_array($sult);
$this->total=$tempvar[0];
}
//查询得到结果集,存入数组c_found[][]中
functionGetFound(){
$sult=mysql_query($this->c_query,$this->c_result)ordie(mysql_error());
while($found=mysql_fetch_array($sult)){
$this->c_found[]=$found;
}
}
//查询数据,并将结果分页存入一个变量
functionShowTable(){
$this->connect();
$this->TatolPage();
if(empty($_GET[offset])){
$_GET[offset]=0;
}
$this->c_query.="limit".$_GET[offset].",".$this->c_rows;
$sult=mysql_query($this->c_query,$this->c_result)ordie(mysql_error());
//解析query,得到要显示出来的字段值
$tempvar=explode("",$this->c_query);
$fields=explode(",",$tempvar[1]); //字段值(数组)
//显示数据到一个表
$echo_content.="<tablewidth=100%border=1>";
while($found=@mysql_fetch_array($sult)){
$echo_content.="<tr><td>";
$echo_content.="<ahref=newsshow.php?ID=".$found[0].">".$found[1]."</a></td>";
//显示用户指定的字段,此处需仔细看
for($i=2;$i<count($fields);$i++){
$echo_content.="<td>".$found[$i]."</td>";
}
$echo_content.="</tr>";
}
//分页
if($this->c_rows==0){
$this->c_error.="每页显示的数目不能为0";
exit;
}
$total_page=ceil($this->total/$this->c_rows);
$pre_page=$_GET[offset]-$this->c_rows;
//下一页
$nex_page=$_GET[offset]+$this->c_rows;
//显示上一页
if($pre_page>=0){
$echo_content.="<tr><tdcolspan=10><ahref=$PHP_SELF?offset=".$pre_page.">上页</a>&";
}else{
$echo_content.="<tr><tdcolspan=10>上页&";
}
//显示页码
for($i=1;$i<=$total_page;$i++){
if($_GET[offset]/$this->c_rows==($i-1)){
$echo_content.="&第".$i."页&";
}else{
$echo_content.="&<ahref=$PHP_SELF?offset=".($i-1)*$this->c_rows.">".$i."</a>&";
}
}
//显示下一页
if($nex_page!=0and($_GET[offset]+$this->c_rows)<=$this->total){
$echo_content.="&<ahref=$PHP_SELF?offset=".$nex_page.">下页</a></td></tr>";
}else{
$echo_content.="&下页</td></tr>";
}
$echo_content.="</table>";
return$echo_content;
}
}
/*例子
//browser("表名",每页显示的数目,"sql","查询条件","排序条件");
$gggg=newbrowser("news",5,"selectauto_id,news_titlefromnews","","orderbynewstimedesc");
$temp=$gggg->ShowTable();
echo$temp;
//$gggg->GetFound()是将查询结果集存在一个二维数组里,本例中没有用到。
*/
?>
以下是我写的,请各位加以指点,测试,看能否进行更好的改进和更多的支持。
目前还只支持单一的表,不支持联合查询。但未来可以会考虑如何支持。
代码:
<?php
/****************************************************************
这个类主要是解决针对很多表的简单数据查询,还在完善中。希望广大网友多提意见和建议。
我的目的是开发出一个几乎可以适用于所有mysql表的查询并将结果集分页的类。
可以自动识别查询中要显示的字段值。
在此,特别声明,要感谢chinaunix的朋友,特别是PHP版的网友们长期以来给我的帮助。
特别要提的是NightKids,一直以来,他都给了我无私的帮助,甚至是他的源代码。
这个类可以被任何人自由引用,使用,修改。但请保留这段文字。
使用这个类造成的一切损失,都与作者tonera无关。
我还在考虑,对于一些复杂的联合查询,可以派生一个类,重新构造sql实现。
这个类没有考虑更多的显示风格,你可以自己构造。
*****************************************************************/
classbrowser{
var$c_table; //要查询的表名
var$c_rows; //要显示的行数
var$c_lation; //查询的条件
var$c_order; //排序的条件
var$c_result; //查询的数据连接句柄
var$c_query; //最终构造的查询
var$c_found; //结果集
var$c_error; //错误收集器
var$c_offset; //分页显示的偏移量
var$total; //结果集的总数
//连接数据库
functionconnect(){
include"../connect.inc.php";
if($connection==false){
$this->c_error.="没有连接上数据库。<br>";
exit;
}
$this->c_result=$connection;
}
//构造函数,初始化变量
functionbrowser($tablename,$row,$sql,$lation,$orderby){
$this->c_table=$tablename;
$this->c_rows=$row;
if(empty($this->c_offset)){
$this->c_offset=0;
}
if(empty($tablename)orempty($row)orempty($sql)){
$this->c_error="没有查询的表或没有批定显示多少行或没有查询语句<br>";
}
$this->c_query=$sql;
if(!empty($lation)){
$this->c_query.="".$lation;
}
if(!empty($orderby)){
$this->c_query.="".$orderby;
}
}
//计算总页数
functionTatolPage(){
$sult=mysql_query("selectcount(*)as"total_rows"from$this->c_table",$this->c_result);
if($sult==false){
$this->c_error.="计算结果集总数目的查询失败,请检查。<br>";
exit;
}
$tempvar=mysql_fetch_array($sult);
$this->total=$tempvar[0];
}
//查询得到结果集,存入数组c_found[][]中
functionGetFound(){
$sult=mysql_query($this->c_query,$this->c_result)ordie(mysql_error());
while($found=mysql_fetch_array($sult)){
$this->c_found[]=$found;
}
}
//查询数据,并将结果分页存入一个变量
functionShowTable(){
$this->connect();
$this->TatolPage();
if(empty($_GET[offset])){
$_GET[offset]=0;
}
$this->c_query.="limit".$_GET[offset].",".$this->c_rows;
$sult=mysql_query($this->c_query,$this->c_result)ordie(mysql_error());
//解析query,得到要显示出来的字段值
$tempvar=explode("",$this->c_query);
$fields=explode(",",$tempvar[1]); //字段值(数组)
//显示数据到一个表
$echo_content.="<tablewidth=100%border=1>";
while($found=@mysql_fetch_array($sult)){
$echo_content.="<tr><td>";
$echo_content.="<ahref=newsshow.php?ID=".$found[0].">".$found[1]."</a></td>";
//显示用户指定的字段,此处需仔细看
for($i=2;$i<count($fields);$i++){
$echo_content.="<td>".$found[$i]."</td>";
}
$echo_content.="</tr>";
}
//分页
if($this->c_rows==0){
$this->c_error.="每页显示的数目不能为0";
exit;
}
$total_page=ceil($this->total/$this->c_rows);
$pre_page=$_GET[offset]-$this->c_rows;
//下一页
$nex_page=$_GET[offset]+$this->c_rows;
//显示上一页
if($pre_page>=0){
$echo_content.="<tr><tdcolspan=10><ahref=$PHP_SELF?offset=".$pre_page.">上页</a>&";
}else{
$echo_content.="<tr><tdcolspan=10>上页&";
}
//显示页码
for($i=1;$i<=$total_page;$i++){
if($_GET[offset]/$this->c_rows==($i-1)){
$echo_content.="&第".$i."页&";
}else{
$echo_content.="&<ahref=$PHP_SELF?offset=".($i-1)*$this->c_rows.">".$i."</a>&";
}
}
//显示下一页
if($nex_page!=0and($_GET[offset]+$this->c_rows)<=$this->total){
$echo_content.="&<ahref=$PHP_SELF?offset=".$nex_page.">下页</a></td></tr>";
}else{
$echo_content.="&下页</td></tr>";
}
$echo_content.="</table>";
return$echo_content;
}
}
/*例子
//browser("表名",每页显示的数目,"sql","查询条件","排序条件");
$gggg=newbrowser("news",5,"selectauto_id,news_titlefromnews","","orderbynewstimedesc");
$temp=$gggg->ShowTable();
echo$temp;
//$gggg->GetFound()是将查询结果集存在一个二维数组里,本例中没有用到。
*/
?>
相关文章
- 2022-09-15:Range模块是跟踪数字范围的模块。 设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们。 半开区间 [left, right) 表
- mybatis查询返回一个对象中带有集合
- 我的项目 | 派查查 :一个WearOS智能手表系统上的快递查询应用
- 2023-01-03:超过5名学生的课。编写一个SQL查询来报告 至少有5个学生 的所有班级,返回结果不限顺序。请问sql语句如何写? +---------+
- 2023-01-15:销售员。编写一个SQL查询,报告没有任何与名为 “RED” 的公司相关的订单的所有销售人员的姓名。以 任意顺序 返回结果表。 DROP T
- 2023-01-03:超过5名学生的课。编写一个SQL查询来报告 至少有5个学生 的所有班级,返回结果不限顺序。请问sql语句如
- 2023-01-15:销售员。编写一个SQL查询,报告没有任何与名为 “RED” 的公司相关的订单的所有销售人员的姓名。以 任意
- SQLServer 错误 2020 为实体“%.*ls”报告的依赖关系不包含对列的引用。 这是由于此实体引用的对象不存在,或由于此实体中的一个或多个语句有错误。 在重新运行该查询之前,请确保该实体中没有错误并且该实体引用的所有对象都存在。 故障 处理 修复 支持远程
- 查询Sqlserver数据库死锁的一个存储过程分享
- 查询一个PostgreSQL表详解数据库
- postgresql 查询某一个表中的所有字段详解数据库
- MySQL查询语句:解锁数据库新世界(mysql的查询语句)
- 提高MySQL查询效率:加速你的数据库(mysql加快查询速度)
- 查新MySQL数据库的大小:简单几步搞定!(查询mysql数据库大小)
- 查询MySQL聚合查询:求取均值(mysql均值)
- Oracle构建专属查询用户(oracle建查询用户)
- 下一个值Oracle 查询序列下一个值的方法(oracle查询序列)
- 查询 Oracle 数据库中的结果:一个指南(oracle显示查询结果)
- Linux 查询公网IP的简易方法(linux查询公网ip)
- MySQL 查询日期范围:简易指南(mysql查询日期范围)
- 深入探索 Oracle 空间查询(oracle空间查询)
- MySQL字段索引:优化查询效率的重要手段(mysql字段索引)
- 快速查询Oracle表结构:使用简单、操作便捷的方法(查询oracle表结构)
- 查找Oracle数据库的端口号(查询oracle 端口号)
- MySQL查看慢查询的路径寻找(mysql 查看慢查询)
- MSSQL查询表创建时间:一个简单的方案(mssql查询表创建时间)
- MSSQL 日期查询:大于某一个日期的所有记录(mssql 查询日期大于)
- 端口查询Redis可用端口一个实用性指南(查redis所有的可用)
- 外加多输入一个空格,导致查询失败的解决方法(mysql不小心回车 额)
- 探索Redis路径一个简洁实用的指南(如何查询redis路径)
- 查询Oracle中的序列一个指南(oracle中序列的查询)
- MySQL查询下一个月份的方法(mysql下月的月份)
- 一个查询的SQL语句请教,希望能够用一条SQL语句得到结果
- SQL参数化查询的另一个理由命中执行计划
- php中使用临时表查询数据的一个例子
- mysql优化limit查询语句的5个方法
- 只有两个字段用一个sql语句查询出某个学生的姓名、成绩以及在表中的排名