SQL数据库——order by 语句

ORDER BY 语句用于对结果集进行排序。
ORDER BY 语句
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
原始的表 (用在例子中的):
首先,order by是用来写在where之后,给多个字段来排序的一个DQL查询语句。
其次,order by写法:
1. select 字段列表/* from 表名 where 条件 order by 字段名1 asc/desc, 字段名2 asc/desc,…
2. select 字段列表/* from 表名 where 条件 order by 字段序号 asc/desc, 字段序号 asc/desc,… (此时字段序号要从1开始)
3. select 字段列表/* from 表名 where 条件 order by 字段别名1 asc/desc, 字段别名2 asc/desc,…(这里类似于第一种,无非就是把字段名加了个别名来代替而已。)
然后,order by的方式:
1.asc 升序,可以省略,是数据库默认的排序方式
2.desc 降序,跟升序相反。
最后要注意order by的原则,写在最前面的字段,他的优先级最高,也就是写法中第一个的字段名1的优先级最高,优先执行他的内容。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

首先以sclass的降序查找student表中的记录
写法为:
select * from student t order by t.sclass desc;
输出为:
在这里插入图片描述
可以看到是以sclass的降序排列的。
再来:以Cno升序、Degree降序查询Score表的所有记录。
写法为:
select * from score s order by s.cno, s.degree desc;
输出为:
在这里插入图片描述
可以看到是优先以cno的升序来排列的,在cno相同的里面再以degree的降序来排列的。

所以总结一下,order by的用法就是用来做排序,写在where之后,简单明了。

  • 26
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Oracle 10g 开发与管理 本文是由笔者2012年学习oracle数据库时编写的学习札记,其中的题目 多数为老师留下的思考题目。 我相信本文会对初学者使用oracle有一个初步的使用印象。右图为我所参 考的书籍。 第一讲 Oacle关系数据库 9 一. Oracle的安装 9 二. 用浏览器进入em 企业管理器 11 三.启动DBCA的方法 11 四.服务设置 11 五. Oracle的卸载 11 六. Oracle数据库的应用系统结构 11 七. 补充资料——oracle安装时出现的问题 12 第二讲 Oacle数据库体系结构 14 一. 物理存储结构——(数据库载体) 14 1.数据文件(.DBF) 14 2.日志文件 (.Log) 14 1) 日志文件 15 2) 数据库工作模式 15 3.控制文件(.ctl) 15 4.参数文件 (.ora) 16 二. 逻辑存储结构 17 1.数据块 (Data Blocks) 17 2.盘区(Extent) 18 3.段 (Segment) 18 4.表空间(Table Spaces) P34 18 三. 内存结构 19 1.数据缓冲区: 内存的40% 19 2.日志缓冲区: 19 3.数据字典缓冲区: 19 4.共享池 内存的10% 19 5.大池 5-10M 20 6.JAVA池 不小于20M 20 7.Streams池 20 8.软件代码区: 20 9.程序全局区(PGA) 20 四. 实例的进程结构(实例=SGA + 后台进程) 20 1.DBWR (数据库写入进程) 21 2.LGWR(日志写入进程) 22 3.ARCH(归档进程)-可选进程 22 4.CKPT(检查点进程)-可选进程 22 5.SMON (系统监控进程) 22 6.PMON (进程监控进程) 22 7.RECO (恢复进程) 22 8. Dnnn (调度进程)-可选进程(略) 22 五. 数据字典 22 第三讲 用户、模式和表 24 一. 用户和模式 24 1.模式 24 2.模式对象 24 3.用户 24 (1)创建用户 24 (2)授权 24 (3)删除用户及该模式下对象 26 二. 表 26 1. 数据类型 26 (1)字符型 26 (2)数值型 26 (3)日期时间型 26 (4)LOB (大型对象) 26 (5)RowID (伪列类型) 27 2. 创建表 27 (1)Create Table 表名 27 (2)在原来已有表上建一个新表(结构和数据) 27 (3)使用OEM建表 27 3.默认值和NULL值 27 三. 修改表 28 四. 删除表 28 五. 数据完整性 28 1.Primary Key 约束 28 2.NOT NULL约束 29 3.Unique 约束 29 4.Foreign Key 约束 29 5.Check约束 (最复杂)列级 | 表级 29 第四讲 SQL基本查询 31 一. SQL语句概述 31 1. SQL简介 31 2. SQL分类 31 3. PL/SQL (Procedure Language) 31 二. SQL*Plus 31 1.启动 SQL*Plus 单行编辑 31 2.启动iSQL*Plus 多行编辑 31 3.退出 32  直接关闭 32  输入:Exit 或 quit 32 三. 本书所使用的示例模式 32 1.Vendition:销售管理系统(11个表)(略) 32 2. School:学生成绩管理系统(6个表) 32 四. SQL SELECT语句 34 1.Select语句的格式 34 2.Select … From … ——选择列(投影) 35 3.Where子句——选择行(选择)数据过滤 35 4.Order By子句 35 5.统计函数——列名应指定别名 35 6. Group By分组 36 7.Having子句 36 8.练习:表的查询 36 五. 在SQL *Plus中使用函数 37 1.字符串函数 37 2.数字函数 37 3.日期时间函数 38 4.转换函数 38 第五讲 修改SQL数据与SQL*Plus命令 40 一.添加数据 40 1.Insert Into 表名 [ 字段列表 ] Values (值) 40 2.向表中插入空值 40 3.从其它表中拷贝数据 40 二. 更新数据 41 三. 删除数据 42 1.Delete 语句 42 2.Truncate 语句 42 四. SQL*Plus命令 42 1.设置环境变量命令 42 (1)Pause 43 (2)pagesize 和 newpage 43 (3)linesize 43
DB类<?php header('Content-Type:text/html; charset=utf-8'); basename($_SERVER['PHP_SELF'])=='mysql.inc.php'&&header; ('Location:http://'.$_SERVER['HTTP_HOST']); //禁止直接访问本页 /** ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ ※※※※※※※※ 【文件名】: mysql.inc.php 【作 用】: mysql数据库操作类 【作 者】: Riyan 【版 本】: version 2.0 【修改日期】: 2010/02/11 ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ ※※※※※※※※ **/ class mysql{ private $host; // 数据库主机 private $user; // 数据库用户名 private $pass; // 数据库密码 private $data; // 数据库名 private $conn; // 数据库连接标识 private $sql; // sql语句 private $code; // 数据库编码,GBK,UTF8,GB2312 private $result; // 执行query命令的结果数据集 private $errLog=true; // 是否开启错误日志,默认开启 private $showErr=true; // 显示所有错误,具有安全隐患,默认开启 private $pageNo=1; // 当前页 private $pageAll=1; // 总页数 private $rsAll=0; // 总记录 private $pageSize=10; // 每页显示记录条数 /****************************************************************** -- 函数名:__construct($host,$user,$pass,$data,$code,$conn) -- 作 用:构造函数 -- 参 数:$host 数据库主机地址(必填) $user 数据库用户名(必填) $pass 数据库密码(必填) $data 数据库名(必填) $conn 数据库连接标识(必填) $code 数据库编码(必填) -- 返回值:无 -- 实 例:无 *******************************************************************/ public function __construct($host,$user,$pass,$data,$code='utf8', $conn='conn'){ $this->host=$host; $this->user=$user; $this->pass=$pass; $this->data=$data; $this->conn=$conn; $this->code=$code; $this->connect(); } public function __get($name){return $this->$name;} public function __set($name,$value){$this->$name=$value;} // 数据库连接 private function connect(){ if ($this->conn=='pconn') $this->conn=mysql_pconnect($this- >host,$this->user,$this->pass); // 永久链接 else $this->conn=mysql_connect($this->host,$this->user,$this- >pass); // 临时链接 if (!$this->conn) $this->show_error('无法连接服务器'); $this->select_db($this->data); $this->query('SET NAMES '.$this->code); $this->query("SET CHARACTER_SET_CLIENT='{$this->code}'"); $this->query("SET CHARACTER_SET_RESULTS='{$this->code}'"); } // 数据库选择 public function select_db($data){ $result=mysql_select_db($data,$this->conn); if (!$result) $this->show_error('无法连接数据库'.$data); return $result; } /****************************************************************** -- 函数名:get_info($num) -- 作 用:取得 MySQL 服务器信息 -- 参 数:$num 信息值(选填) -- 返回值:字符串 -- 实 例:无 *******************************************************************/ public function get_info($num){ switch ($num){ case 1: return mysql_get_server_info(); // 取得 MySQL 服务器信息 break; case 2: return mysql_get_host_info(); // 取得 MySQL 主机信息 break; case 3: return mysql_get_proto_info(); // 取得 MySQL 协议信息 break; default: return mysql_get_client_info(); // 取得 MySQL 客户端信息 } } /****************************************************************** -- 函数名:query($sql) -- 作 用:数据库执行语句,可执行查询添加修改删除等任何sql语句 -- 参 数:$sql sql语句(必填) -- 返回值:布尔 -- 实 例:无 *******************************************************************/ public function query($sql){ if (empty($sql)) $this->show_error('SQL语句为空'); $this->sql=preg_replace('/ {2,}/',' ',trim($sql)); $this->result=mysql_query($this->sql,$this->conn); if (!$this->result) $this->show_error('SQL语句有误',true); return $this->result; } /****************************************************************** -- 函数名:create_db($data) -- 作 用:创建添加新的数据库 -- 参 数:$data 数据库名称(必填) -- 返回值:字符串 -- 实 例:无 *******************************************************************/ public function create_database($data=''){$this->query("CREATE DATABASE {$data}");} // 查询服务器所有数据库 public function show_database(){ $this->query('SHOW DATABASES'); $db=array(); while ($row=$this->fetch_array()) $db[]=$row['Database']; return $db; } // 查询数据库下所有的表 public function show_tables($data=''){ if (!empty($data)) $db=' FROM '.$data; $this->query('SHOW TABLES'.$data); $tables=array(); while ($row=$this->fetch_row()) $tables[]=$row[0]; return $tables; } /****************************************************************** -- 函数名:copy_tables($tb1,$tb2,$where) -- 作 用:复制表 -- 参 数:$tb1 新表名(必填) $tb2 待复制表的表名(必填) $Condition 复制条件(选填) -- 返回值:布尔 -- 实 例:无 *******************************************************************/ public function copy_tables($tb1,$tb2,$Condition=''){$this->query ("SELECT * INTO `{$tb1}` FROM `{$tb2}` {$Condition}");} /****************************************************************** -- 函数名:Get($Table,$Fileds,$Condition,$Rows) -- 作 用:查询数据 -- 参 数:$Table 表名(必填) $Fileds 字段名,默认为所有(选填) $Condition 查询条件(选填) $Rows 待查询记录条数,为0表示不限制(选填) -- 返回值:布尔 -- 实 例:$DB->Get('mydb','user,password','order by id desc',10) *******************************************************************/ public function Get($Table,$Fileds='*',$Condition='',$Rows=0){ if (!$Fileds) $Fileds='*'; if ($Rows>0) $Condition.=" LIMIT 0,{$Rows}"; $sql="SELECT {$Fileds} FROM `{$Table}` {$Condition}"; return $this->query($sql); } // 只查询一条记录 public function GetRs($Table,$Fileds='*',$Condition=''){ if (!$Fileds) $Fileds='*'; $this->query("SELECT {$Fileds} FROM `{$Table}` {$Condition} LIMIT 0,1"); return $this->fetch_array(); } /****************************************************************** -- 函数名:Add($Table,$Data) -- 作 用:添加数据 -- 参 数:$Table 表名(必填) $Data 待添加数据,可以为数组(必填) -- 返回值:布尔 -- 实 例:$DB->Add('mydb',array ('user'=>'admin','password'=>'123456','age'=>'18') 数组类型 $DB->Add('mydb','user=admin,password=123456,age=18') 字符 串类型 *******************************************************************/ public function Add($Table,$Data){ if (!is_array($Data)){ $arr=explode(',',$Data); $Data=array(); foreach ($arr as $val){ list($key,$val)=explode('=',$val); if (!$val) $val=''; $Data[$key]=$val; } } $Fileds='`'.implode('`,`',array_keys($Data)).'`'; $Value="'".implode("','",array_values($Data))."'"; return $this->query("INSERT INTO `{$Table}` ({$Fileds}) VALUES ({$Value})"); } /****************************************************************** -- 函数名:Set($Table,$Data,$Condition,$unQuot) -- 作 用:更改数据 -- 参 数:$Table 表名(必填) $Data 待更改数据,可以为数组(必填) $Condition 更改条件(选填) $unQuot 不需要加引号的字段,用于字段的加减运算等情况,多个 字段用,分隔或者写入一个数组(选填) -- 返回值:布尔 -- 实 例:$DB->Set('mydb',array ('user'=>'admin','password'=>'123456','WHERE id=1') 数组类型 $DB->Set('mydb',"user='admin',password='123456'",'WHERE id=1') 字符串类型 *******************************************************************/ public function Set($Table,$Data,$Condition='',$unQuot=''){ if (is_array($Data)){ if (!is_array($unQuot)) $unQuot=explode(',',$unQuot); foreach ($Data as $key=>$val){ $arr[]=$key.'='.(in_array($key,$unQuot)?$val:"'$val'"); } $Value=implode(',',$arr); }else $Value=$Data; return $this->query("UPDATE `{$Table}` SET {$Value} {$Condition}"); } /****************************************************************** -- 函数名:Del($Table,$Condition) -- 作 用:删除数据 -- 参 数:$Table 表名(必填) $Condition 删除条件(选填) -- 返回值:布尔 -- 实 例:$DB->Del('mydb','id=1') *******************************************************************/ public function Del($Table,$Condition=''){return $this->query ("DELETE FROM `{$Table}`".($Condition?" WHERE {$Condition}":''));} // 取得结果数据 public function result($result=''){ if (empty($result)) $result=$this->result; if ($result==null) $this->show_error('未获取到查询结果',true); return mysql_result($result); } /****************************************************************** -- 函数名:fetch_array($Table,$Condition) -- 作 用:根据从结果集取得的行生成关联数组 -- 参 数:$result 结果集(选填) $type 数组类型,可以接受以下值:MYSQL_ASSOC,MYSQL_NUM 和 MYSQL_BOTH(选填) -- 返回值:布尔 -- 实 例:$DB->Del('mydb','id=1') *******************************************************************/ public function fetch_array($result='',$type=MYSQL_BOTH){ if (empty($result)) $result=$this->result; if (!$result) $this->show_error('未获取到查询结果',true); return mysql_fetch_array($result,$type); } // 获取关联数组,使用$row['字段名'] public function fetch_assoc($result=''){ if (empty($result)) $result=$this->result; if (!$result) $this->show_error('未获取到查询结果',true); return mysql_fetch_assoc($result); } // 获取数字索引数组,使用$row[0],$row[1],$row[2] public function fetch_row($result=''){ if (empty($result)) $result=$this->result; if (!$result) $this->show_error('未获取到查询结果',true); return mysql_fetch_row($result); } // 获取对象数组,使用$row->content public function fetch_obj($result=''){ if (empty($result)) $result=$this->result; if (!$result) $this->show_error('未获取到查询结果',true); return mysql_fetch_object($result); } // 取得上一步 INSERT 操作产生的 ID public function insert_id(){return mysql_insert_id();} // 指向确定的一条数据记录 public function data_seek($id){ if ($id>0) $id=$id-1; if (!mysql_data_seek($this->result,$id)) $this->show_error('指定 的数据为空'); return $this->result; } /****************************************************************** 函数名:num_fields($result) 作 用:查询字段数量 参 数:$Table 数据库表名(必填) 返回值:字符串 实 例:$DB->num_fields("mydb") *******************************************************************/ public function num_fields($result=''){ if (empty($result)) $result=$this->result; if (!$result) $this->show_error('未获取到查询结果',true); return mysql_num_fields($result); } // 根据select查询结果计算结果集条数 public function num_rows($result=''){ if (empty($result)) $result=$this->result; $rows=mysql_num_rows($result); if ($result==null){ $rows=0; $this->show_error('未获取到查询结果',true); } return $rows>0?$rows:0; } // 根据insert,update,delete执行结果取得影响行数 public function affected_rows(){return mysql_affected_rows();} // 获取地址栏参数 public function getQuery($unset=''){ //$unset表示不需要获取的参数, 多个参数请用,分隔(例如:getQuery('page,sort')) if (!empty($unset)){ $arr=explode(',',$unset); foreach ($arr as $val) unset($_GET[$val]); } foreach ($_GET as $key=>$val) $list[]=$key.'='.urlencode($val); return is_array($list)?implode('&',$list):''; } /****************************************************************** 函数名:getPage($Table,$Fileds,$Condition,$pageSize) 作 用:获取分页信息 参 数:$Table 表名(必填) $Fileds 字段名,默认所有字段(选填) $Condition 查询条件(选填) $pageSize 每页显示记录条数,默认10条(选填) 返回值:字符串 实 例:无 *******************************************************************/ public function getPage($Table,$Fileds='*',$Condition='', $pageSize=10){ if (intval($pageSize)>0){$this->pageSize=intval($pageSize);} if (isset($_GET['page']) && intval($_GET['page'])){$this- >pageNo=intval($_GET['page']);} if (empty($Fileds)){$Fileds='*';} $sql="SELECT * FROM `{$Table}` {$Condition}"; $this->query($sql); $this->rsAll=$this->num_rows(); if ($this->rsAll>0){ $this->pageAll=ceil($this->rsAll/$this->pageSize); if ($this->pageNo<1){$this->pageNo=1;} if ($this->pageNo>$this->pageAll){$this->pageNo=$this- >pageAll;} $sql="SELECT {$Fileds} FROM `{$Table}` {$Condition}".$this- >limit(true); $this->query($sql); } return $this->rsAll; } // 构造分页limit语句,和getPage()函数搭配使用 public function limit($str=false){ $n=($this->pageNo-1)*$this->pageSize; return $str?' LIMIT '.$n.','.$this->pageSize:$n; } // 显示分页,必须和getPage()函数搭配使用 public function showPage($number=true){ $pageBar=''; if ($this->pageAll>1){ $pageBar.='<ul class="page">'.chr(10); $url=$this->getQuery('page'); $url=empty($url)?'?page=':'?'.$url.'&page;='; if ($this->pageNo>1){ $pageBar.='<li><a href="'.$url.'1">首页</a></li>'.chr (10); $pageBar.='<li><a >pageNo-1).'">上页 </a></li>'.chr(10); }else{ $pageBar.='<li class="stop"><span>首页</span></li>'.chr (10); $pageBar.='<li class="stop"><span>上页</span></li>'.chr (10); } if ($number){ $arr=array(); if ($this->pageAll<6){ for ($i=0;$i<$this->pageAll;$i++) $arr[]=$i+1; }else{ if ($this->pageNo<3) $arr=array(1,2,3,4,5); elseif ($this->pageNo<=$this->pageAll&&$this- >pageNo>($this->pageAll-3)) for ($i=1;$i<6;$i++) $arr[]=$this->pageAll-5+$i; else for ($i=1;$i<6;$i++) $arr[]=$this->pageNo-3+$i; } foreach ($arr as $val){ if ($val==$this->pageNo) $pageBar.='<li class="curr"><span>'.$val.'</span></li>'.chr(10); else $pageBar.='<li><a href="'.$url.$val.'">'. $val.'</a></li>'.chr(10); } } if ($this->pageNo<$this->pageAll){ $pageBar.='<li><a >pageNo+1).'">下页 </a>'.chr(10); $pageBar.='<li><a >pageAll.'">尾页 </a></li>'.chr(10); }else{ $pageBar.='<li class="stop"><span>下页</span></li>'.chr (10); $pageBar.='<li class="stop"><span>尾页</span></li>'.chr (10); } $pageBar.='<li class="stop"><span>'; $pageBar.="页次:{$this->pageNo}/{$this->pageAll} {$this- >pageSize}条/页 总记录:{$this->rsAll} 转到:"; $pageBar.="<input id=\"page\" value=\"{$this->pageNo}\" type=\"text\" onblur=\"goPage('{$url}',{$this->pageAll});\" />"; $pageBar.='</span></li></ul>'.chr(10); } echo $pageBar; } // 获得客户端真实的IP地址 public function getip(){ if ($_SERVER['HTTP_X_FORWARDED_FOR']) return $_SERVER ['HTTP_X_FORWARDED_FOR']; elseif ($_SERVER['HTTP_CLIENT_IP']) return $_SERVER ['HTTP_CLIENT_IP']; elseif ($_SERVER['REMOTE_ADDR']) return $_SERVER['REMOTE_ADDR']; elseif (getenv('HTTP_X_FORWARDED_FOR')) return getenv ('HTTP_X_FORWARDED_FOR'); elseif (getenv('HTTP_CLIENT_IP')) return getenv ('HTTP_CLIENT_IP'); elseif (getenv('REMOTE_ADDR')) return getenv('REMOTE_ADDR'); else return ''; } /****************************************************************** -- 函数名:show_error($message,$sql) -- 作 用:输出显示错误信息 -- 参 数:$msg 错误信息(必填) $sql 显示错误的SQL语句,在SQL语句错误时使用(选填) -- 返回值:字符串 -- 实 例:无 *******************************************************************/ public function show_error($msg='',$sql=false){ $err='['.mysql_errno().']'.mysql_error(); if ($sql) $sql='SQL语句:'.$this->sql; if ($this->errLog){ $dirs='error/'; //设置错误日志保存目录 $fileName=date('Y-m-d').'.log'; $filePath=$dirs.$fileName; if (!is_dir($dirs)){ $dirs=explode('/',$dirs); $temp=''; foreach($dirs as $dir){ $temp.=$dir.'/'; if (!is_dir($temp)){ mkdir($temp,0777) or die('__无法建立目录'. $temp.',自动取消记录错误信息'); } } $filePath=$temp.$fileName; } $text="错误事件:".$msg."\r\n错误原因:".$err."\r\n".($sql? $sql."\r\n":'')."客户端IP:".$this->getip()."\r\n记录时间:".date('Y-m-d H:i:s')."\r\n\r\n"; $log='错误日志:__'.(error_log($text,3,$filePath)?'此错误信 息已被自动记录到日志'.$fileName:'写入错误信息到日志失败'); } if ($this->showErr){ echo ' <fieldset class="errlog"> <legend>错误信息提示</legend> <label class="tip">错误事件:'.$err.'</label> <label class="msg">错误原因:'.$msg.'</label> <label class="sql">'.$sql.'</label> <label class="log">'.$log.'</label> </fieldset>'; exit(); } } /****************************************************************** -- 函数名:drop($table) -- 作 用:删除表(请慎用,无法恢复) -- 参 数:$table 要删除的表名,默认为所有(选填) -- 返回值:无 -- 实 例:$DB->drop('mydb') *******************************************************************/ public function drop($table){ if ($table){ $this->query("DROP TABLE IF EXISTS `{$table}`"); }else{ $rst=$this->query('SHOW TABLES'); while ($row=$this->fetch_array()){ $this->query("DROP TABLE IF EXISTS `{$row[0]}`"); } } } /****************************************************************** -- 函数名:makeSql($table) -- 作 用:从数据表读取信息并生成SQL语句 -- 参 数:$table 待读取的表名(必填) -- 返回值:字符串 -- 实 例:无 *******************************************************************/ public function makeSql($table){ $result=$this->query("SHOW CREATE TABLE `{$table}`"); $row=$this->fetch_row($result); $sqlStr=''; if ($row){ $sqlStr.="-- ---------------------------------------------------------------\r\n"; $sqlStr.="-- Table structure for `{$table}`\r\n"; $sqlStr.="-- ---------------------------------------------------------------\r\n"; $sqlStr.="DROP TABLE IF EXISTS `{$table}`;\r\n{$row[1]};\r \n"; $this->Get($table); $fields=$this->num_fields(); if ($this->num_rows()>0){ $sqlStr.="\r\n"; $sqlStr.="-- ---------------------------------------------------------------\r\n"; $sqlStr.="-- Records of `{$table}`\r\n"; $sqlStr.="-- ---------------------------------------------------------------\r\n"; while ($row=$this->fetch_row()){ $comma=''; $sqlStr.="INSERT INTO `{$table}` VALUES ("; for($i=0;$i<$fields;$i++){ $sqlStr.=$comma."'".mysql_escape_string($row [$i])."'"; $comma=','; } $sqlStr.=");\r\n"; } } $sqlStr.="\r\n"; } return $sqlStr; } /****************************************************************** -- 函数名:readSql($filePath) -- 作 用:读取SQL文件并过滤注释 -- 参 数:$filePath SQL文件路径(必填) -- 返回值:字符串/布尔/数组 -- 实 例:无 *******************************************************************/ public function readSql($filePath){ if (!file_exists($filePath)) return false; $sql=file_get_contents($filePath); if (empty($sql)) return ''; $sql=preg_replace('/(\/\*(.*)\*\/)/s','',$sql); //过滤批量注释 $sql=preg_replace('/(--.*)|[\f\n\r\t\v]*/','',$sql); //过滤单行 注释与回车换行符 $sql=preg_replace('/ {2,}/',' ',$sql); //将两个以上的连续空格替 换为一个,可以省略这一步 $arr=explode(';',$sql); $sql=array(); foreach ($arr as $str){ $str=trim($str); if (!empty($str)) $sql[]=$str; } return $sql; } /****************************************************************** -- 函数名:saveSql($sqlPath,$table) -- 作 用:将当前数据库信息保存为SQL文件 -- 参 数:$sqlPath SQL文件保存路径,如果为空则自动以当前日期为文件 名并保存到当前目录(选填) $table 待保存的表名,为空着表示保存所有信息(选填) -- 返回值:字符串 -- 实 例:$DB->saveSql('../mydb.sql'); *******************************************************************/ public function saveSql($sqlPath='',$table=''){ if (empty($table)){ $result=$this->query('SHOW TABLES'); while ($arr=$this->fetch_row($result)){ $str=$this->makeSql($arr[0]); if (!empty($str)) $sql.=$str; } $text="/*************************************************************** \\r\\n"; $text.="-- Database: $this->data\r\n"; $text.="-- Date Created: ".date('Y-m-d H:i:s')."\r\n"; $text.="***************************************************************/ \r\n\r\n"; }else{ $text=''; $sql=$this->makeSql($table); } if (empty($sql)) return false; $text.=$sql; $dir=dirname($sqlPath); $file=basename($sqlPath); if (empty($file)) $file=date('YmdHis').'.sql'; $sqlPath=$dir.'/'.$file; if (!empty($dir)&&!is_dir($dir)){ $path=explode('/',$dir); $temp=''; foreach ($path as $dir){ $temp.=$dir.'/'; if (!is_dir($temp)){ if (!mkdir($temp,0777)) return false; } } $sqlPath=$temp.$file; } $link=fopen($sqlPath,'w+'); if (!is_writable($sqlPath)) return false; return fwrite($link,$text); fclose($link); } /****************************************************************** -- 函数名:loadSql($filePath) -- 作 用:从SQL文件导入信息到数据库 -- 参 数:$filePath SQL文件路径(必填) -- 返回值:字符串 -- 实 例:无 *******************************************************************/ public function loadSql($filePath){ $val=$this->readSql($filePath); if ($val==false) $this->show_error($filePath.'不存在'); elseif (empty($val)) $this->show_error($filePath.'中无有效数 据'); else{ $errList=''; foreach ($val as $sql){ $result=mysql_query($sql); if (!$result) $errList.='执行语句'.$sql.'失败<br />'; } return $errList; } return false; } // 释放结果集 public function free(){mysql_free_result($this->result);} // 关闭数据库 public function close(){mysql_close($this->conn);} // 析构函数,自动关闭数据库,垃圾回收机制 public function __destruct(){ $this->free(); $this->close(); } } ?>
编辑推荐 《Oracle SQL高级编程》:资深Oracle专家力作,OakTable团队推荐,全面、独到、翔实,题材丰富,Oracle开发人员和DBA必备。 媒体推荐 本书作者全部是OakTable的成员,且具有15-29年丰富的Oracle开发经验。在研究一些被其他专门讨论Oracle SQL语言的参考书直接忽略的问题时,这种对Oracle数据库的长期钻研无疑是一个巨大的优势。   ——亚马逊读者评论 目录 第1章 SQL核心 1 1.1 SQL语言 1 1.2 数据库的接口 2 1.3 SQL*Plus 回顾 3 1.3.1 连接到数据库 3 1.3.2 配置SQL*Plus环境 4 1.3.3 执行命令 6 1.4 5 个核心的SQL语句 8 1.5 SELECT语句 8 1.5.1 FROM子句 9 1.5.2 WHERE子句 11 1.5.3 GROUP BY子句 11 1.5.4 HAVING子句 12 1.5.5 SELECT列表 12 1.5.6 ORDERBY子句 13 1.6 INSERT语句 14 1.6.1 单表插入 14 1.6.2 多表插入 15 1.7 UPDATE语句 17 1.8 DELETE语句 20 1.9 MERGE语句 22 1.10 小结 24 第2章 SQL执行 25 2.1 Oracle架构基础 25 2.2 SGA-共享池 27 2.3 库高速缓存 28 2.4 完全相同的语句 29 2.5 SGA-缓冲区缓存 32 2.6 查询转换 35 2.7 视图合并 36 2.8 子查询解嵌套 39 2.9 谓语前推 42 2.10 使用物化视图进行查询重写 44 2.11 确定执行计划 46 2.12 执行计划并取得数据行 50 2.13 SQL执行——总览 52 2.14 小结 53 第3章 访问和联结方法 55 第4章 SQL是关于集合的 95 第5章 关于问题 116 第6章 SQL执行计划 137 第7章 高级分组 170 第8章 分析函数 197 第9章 Model子句 225 第10章 子查询因子化 254 第11章 半联结和反联结 292 第12章 索引 334 第13章 SELECT以外的内容 360 第14章 事务处理 386 第15章 测试与质量保证 415 第16章 计划稳定性与控制 443
投票网——数据库详细设计 本系统需要四个表: 一、用户信息表(userInfo): "字段名 "描述 "=数据类型及要求 "数据举例 " "UID "会员号 "Int(6) "081234 " "Password "密码 "Varchar(8) " " "PwdQuestion "密码保护问题 "Varchar(100) "你叫什么名字 " "Answer "保密保护问题答案"Varchar(100) "奥巴马 " "Name "姓名 "Varchar(20) "奥巴马 " "Sex "性别 "Bit(1:男;0: "1;0 " " " "女) " " "Age "年龄 "Int(3) "22 " "Profession "职业 "Varchar(8) "学生;程序员 " "Native place "籍贯 "Varchar(50) "河南省,南阳市 " "Hobby "业余爱好 "Varchar(100) "流星蝴蝶剑、CS、" " " " "Music " "PetName "昵称 "Varchar(20) "我美国老大 " 二、发起投票信息表(SurveyInfo) "字段名 "描述 "数据类型及要求 "数据举例 " "QID "投票问题编号 "Int(6) "081205 " "UID "发起投票问题的用"Int(6) "081205 " " "户编号 " " " "CID "本问题所属分类 " " " "Question "投票问题 "Varchar(400) "你最喜欢的篮球明" " " " "星 " "IsCheck "本问题是否通过管"Bit(1:OK;0:N"OK " " "理员认证 "O) " " "totalChk "总票数 "Int(6) "20 " "Option1 "问题选项1 "Varchar(100) " 姚明 " "Option2 "问题选项2 "Varchar(100) " 科比 " "Option3 "问题选项3 "Varchar(100) " 韦德 " "Option4 "问题选项4 "Varchar(100) " 保罗 " "Option5 "问题选项5 "Varchar(100) " " "Option6 "问题选项6 "Varchar(100) " " "Option7 "问题选项7 "Varchar(100) " " "Option8 "问题选项8 "Varchar(100) " " "Option9 "问题选项9 "Varchar(100) " " "Option10 "问题选项10 "Varchar(100) " " 三、投票过的问题表(chkInfo) "字段名 "描述 "数据类型及要求 "数据举例 " "QID "投票问题编号 "Int(6) "081234 " "QUID "对此问题过投票的"Int(6) "081234 " " "用户编号 " " " "ChkOption "选择的选项 "Char(2);(A、"C " " " "B、C、D选其一) " " "Account "投票理由 "Varchar(500) "姚明是中国人,支" " " " "持China就选他~ " 四、投票问题分类表(Class) "字段名 "描述 "数据类型及要求 "数据举例 " "CID "分类编号 "Int(2) "1 " "class "类别名称 "Varchar(20) "明星娱乐 " 各功能模块要用到的检索语句 调查分类: 投票类别表(class)的类别名称(class)字段 sql="select class from Class" 最受关注TOP10: 最受关注的即为投票信息表( SurveyInfo )总票数( totalChk )最大的前十个问题 sql="select top 10 * from SurveyInfo order by totalChk desc" 热门投票: 热门投票即为投票信息表( SurveyInfo )总票数( totalChk )最大的前十个问题 sql="select top 5 * from SurveyInfo order by totalChk desc" 最新投票: 最新投票即为投票信息表( SurveyInfo )里问题编号(QID)最大的前5个问题 sql="select top 5 * from SurveyInfo order by QID desc" 最新注册用户: 最新用户即为用户信息表( userInfo )内用户编号(UID)最大的几个 sql="select top 5 * from userInfo order by UID desc" ----------------------- 投票网——数据库详细设计全文共
投票网——数据库详细设计 本系统需要四个表: 一、用户信息表(userInfo): "字段名 "描述 "=数据类型及要求 "数据举例 " "UID "会员号 "Int(6) "081234 " "Password "密码 "Varchar(8) "13266548 " "PwdQuestion "密码保护问题 "Varchar(100) "你叫什么名字? " "Answer "保密保护问题答案"Varchar(100) "奥巴马 " "Name "姓名 "Varchar(20) "奥巴马 " "Sex "性别 "Bit(1:男;0: "1;0 " " " "女) " " "Age "年龄 "Int(3) "22 " "Profession "职业 "Varchar(8) "学生;程序员 " "Native place "籍贯 "Varchar(50) "河南省,南阳市 " "Hobby "业余爱好 "Varchar(100) "流星蝴蝶剑、CS、" " " " "Music " "PetName "昵称 "Varchar(20) "我美国老大 " 二、发起投票信息表(SurveyInfo) "字段名 "描述 "数据类型及要求 "数据举例 " "QID "投票问题编号 "Int(6) "081205 " "UID "发起投票问题的用"Int(6) "081205 " " "户编号 " " " "CID "本问题所属分类 " " " "Question "投票问题 "Varchar(400) "你最喜欢的篮球明" " " " "星? " "IsCheck "本问题是否通过管"Bit(1:OK;0:N"OK " " "理员认证 "O) " " "totalChk "总票数 "Int(6) "20 " "Option1 "问题选项1 "Varchar(100) " 姚明 " "Option2 "问题选项2 "Varchar(100) " 科比 " "Option3 "问题选项3 "Varchar(100) " 韦德 " "Option4 "问题选项4 "Varchar(100) " 保罗 " "Option5 "问题选项5 "Varchar(100) " " "Option6 "问题选项6 "Varchar(100) " " "Option7 "问题选项7 "Varchar(100) " " "Option8 "问题选项8 "Varchar(100) " " "Option9 "问题选项9 "Varchar(100) " " "Option10 "问题选项10 "Varchar(100) " " 三、投票过的问题表(chkInfo) "字段名 "描述 "数据类型及要求 "数据举例 " "QID "投票问题编号 "Int(6) "081234 " "QUID "对此问题过投票的"Int(6) "081234 " " "用户编号 " " " "ChkOption "选择的选项 "Char(2);(A、"C " " " "B、C、D选其一) " " "Account "投票理由 "Varchar(500) "姚明是中国人,支" " " " "持China就选他~ " 四、投票问题分类表(Class) "字段名 "描述 "数据类型及要求 "数据举例 " "CID "分类编号 "Int(2) "1 " "class "类别名称 "Varchar(20) "明星娱乐 " 各功能模块要用到的检索语句 调查分类: 投票类别表(class)的类别名称(class)字段 sql="select class from Class" 最受关注TOP10: 最受关注的即为投票信息表( SurveyInfo )总票数( totalChk )最大的前十个问题 sql="select top 10 * from SurveyInfo order by totalChk desc" 热门投票: 热门投票即为投票信息表( SurveyInfo )总票数( totalChk )最大的前十个问题 sql="select top 5 * from SurveyInfo order by totalChk desc" 最新投票: 最新投票即为投票信息表( SurveyInfo )里问题编号(QID)最大的前5个问题 sql="select top 5 * from SurveyInfo order by QID desc" 最新注册用户: 最新用户即为用户信息表( userInfo )内用户编号(UID)最大的几个 sql="select top 5 * from userInfo order by UID desc" ----------------------- 投票网——

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值