<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>最优良人 &#187; 数据库</title>
	<atom:link href="http://www.zui88.com/view-category/%e6%95%b0%e6%8d%ae%e5%ba%93/feed" rel="self" type="application/rss+xml" />
	<link>http://www.zui88.com/blog</link>
	<description>中山php&#124;最优网络</description>
	<lastBuildDate>Mon, 13 May 2013 04:56:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>mysql STRICT_TRANS_TABLES严格模式下提示Field &#039;id&#039; doesn&#039;t have a default value</title>
		<link>http://www.zui88.com/blog/view-411.html</link>
		<comments>http://www.zui88.com/blog/view-411.html#comments</comments>
		<pubDate>Wed, 26 Sep 2012 03:42:48 +0000</pubDate>
		<dc:creator>lin</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[STRICT_TRANS_TABLES]]></category>

		<guid isPermaLink="false">http://www.zui88.com/blog/?p=411</guid>
		<description><![CDATA[在别的服务器运行我的网站程序的时候，出现了Field 'id' doesn't have a default value 的提示，意思是这个值我没有提交数据，并且数据库结构没有设置默认值，由于对方的mysql服务器开启了STRICT_TRANS_TABLES严格模式，所以报错了 解决方法是： 如果自己的服务器，有权限修改my.ini的话，打开my.ini，查找 sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 修改为 sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 然后重启MYSQL 在别人的虚拟空间上当然不可能实现，所以根本的解决方法还是修改自己的数据结构，把非空的字段加上默认值，以后设计数据库要注意这一点，方便程序的移植]]></description>
			<content:encoded><![CDATA[<p>在别的服务器运行我的网站程序的时候，出现了Field 'id' doesn't have a default value 的提示，意思是这个值我没有提交数据，并且数据库结构没有设置默认值，由于对方的mysql服务器开启了STRICT_TRANS_TABLES严格模式，所以报错了</p>
<p>解决方法是：</p>
<p>如果自己的服务器，有权限修改my.ini的话，打开my.ini，查找<br />
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"</p>
<p>修改为</p>
<p>sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"</p>
<p>然后重启MYSQL</p>
<p>在别人的虚拟空间上当然不可能实现，所以根本的解决方法还是修改自己的数据结构，把非空的字段加上默认值，以后设计数据库要注意这一点，方便程序的移植</p>
<h2 class="title content-title"></h2>
]]></content:encoded>
			<wfw:commentRss>http://www.zui88.com/blog/view-411.html/feed</wfw:commentRss>
		<slash:comments>431</slash:comments>
		</item>
		<item>
		<title>移植方便的php数据库操作类，建表增删改查</title>
		<link>http://www.zui88.com/blog/view-368.html</link>
		<comments>http://www.zui88.com/blog/view-368.html#comments</comments>
		<pubDate>Wed, 30 May 2012 09:46:53 +0000</pubDate>
		<dc:creator>lin</dc:creator>
				<category><![CDATA[后端程序]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.zui88.com/blog/?p=368</guid>
		<description><![CDATA[&#60;?php /** * * 数据操作类 * @author Xiaoqiang * @link // * @copyright Xiaoqiang * @version Svn $Id$ * @package */ class Db { var $links; // 构造函数，初始化数据库（主机,用户名,密码,数据库名） function __construct() { $this-&#62;links = mysql_connect(DB_HOST, DB_USER, DB_PWD); if(DEBUG){ mysql_select_db(DB_NAME) or die('ERROR:'.mysql_error()); } else{ mysql_select_db(DB_NAME); } $char_sql = "SET NAMES '" . CHARSET . "'"; $this-&#62;query($char_sql); } [...]]]></description>
			<content:encoded><![CDATA[<p>&lt;?php<br />
/**<br />
*<br />
* 数据操作类<br />
* @author Xiaoqiang<br />
* @link //<br />
* @copyright Xiaoqiang<br />
* @version Svn $Id$<br />
* @package<br />
*/<br />
class Db {</p>
<p>var $links;<br />
// 构造函数，初始化数据库（主机,用户名,密码,数据库名）<br />
function __construct() {</p>
<p>$this-&gt;links = mysql_connect(DB_HOST, DB_USER, DB_PWD);<br />
if(DEBUG){<br />
mysql_select_db(DB_NAME) or die('ERROR:'.mysql_error());<br />
}<br />
else{<br />
mysql_select_db(DB_NAME);<br />
}<br />
$char_sql = "SET NAMES '" . CHARSET . "'";<br />
$this-&gt;query($char_sql);<br />
}</p>
<p>/**<br />
* ****************** 操作 ******************<br />
*/<br />
/**<br />
* 增删改查操作方法<br />
* 输入sql语句<br />
* 返回布尔值或结果集$row<br />
*/<br />
function query($sql) {<br />
if(DEBUG){<br />
$render =  mysql_query($sql) or die('query ERROR:'.mysql_error()."&lt;br&gt;sql语句出错：" . $sql);<br />
return $render;<br />
}<br />
else{<br />
return mysql_query($sql);<br />
}<br />
}<br />
/**<br />
* 计算行数方法<br />
* 输入<br />
* 结果数组<br />
*/<br />
function count($table,$condition='1') {</p>
<p>$sql = "select count(*) from `".DB_PREFIX.$table."` where $condition";<br />
$result = $this-&gt;select($sql);<br />
return $result[0]['count(*)'];<br />
}<br />
/**<br />
* 原始的sql语句查操作方法<br />
* 输入sql语句<br />
* 结果数组<br />
*/<br />
function select($sql) {<br />
$row = $this-&gt;query($sql);<br />
$results = array();<br />
while($arr = $this-&gt;fetch($row)){<br />
$results[] = $arr;<br />
}<br />
//$this-&gt;free_result($row);<br />
return $results;<br />
}</p>
<p>/**<br />
* 检查某字段是否存在某值<br />
* @param 输入表名.字段,值<br />
* @return id 或者 false<br />
**/<br />
function check_exists($table,$val){<br />
$render = false;<br />
$tab = explode('.',$table);<br />
if($tab['1'] &amp;&amp; $tab['1']!='id'){<br />
$fields = $tab['1'];<br />
$table = "{$tab[0]}.id,{$fields}";<br />
}<br />
else{<br />
$fields = 'id';<br />
$table = $tab[0].".id";<br />
}<br />
$condition = "`$fields` = '{$val}'";<br />
$detail = $this-&gt;read($table,$condition);<br />
if($detail[$fields]){<br />
$render = $detail['id'];<br />
}<br />
return $render;<br />
}</p>
<p>/**<br />
* 查询多条数据方法<br />
* 输入表名.字段，字段;查询条件，条数<br />
* 如果条件是数组，则进入高级搜索模式<br />
* 返回结果数组<br />
*/<br />
function readall($table,$condition='1',$limit='') {<br />
$tab = explode('.',$table);<br />
$table = $tab['0'];<br />
if($tab['1']){<br />
$fields = $tab['1'];<br />
$fields_array  =explode(',',$fields);<br />
$fields = '';<br />
foreach( $fields_array as $one){<br />
$fields .= "`$one`,";<br />
}<br />
$fields = rtrim($fields,',');<br />
}<br />
else{<br />
$fields = '*';<br />
}<br />
if(is_array($condition)){<br />
$condition = $this-&gt;parse_condition($condition);<br />
}<br />
$sql = "select $fields from `".DB_PREFIX.$table."` where $condition";<br />
if($limit)$sql .= " limit $limit";<br />
return $this-&gt;select($sql);<br />
}<br />
/**<br />
* 查询单条数据方法<br />
* 输入表名.字段，字段;查询条件<br />
* 返回结果数组<br />
*/<br />
function read($table,$condition='1') {<br />
$render = $this -&gt;readall($table,$condition,1);<br />
return $render[0];<br />
}<br />
/**<br />
* 修改数据方法<br />
* 输入表名，插入数据array('字段'=&gt;'值'),条件<br />
* 返回布尔值<br />
*/<br />
function update($table,$data,$condition ) {</p>
<p>$set = '';<br />
foreach( $data as $key=&gt;$val){<br />
$set .= "`$key` = '".$val."',";<br />
}<br />
$set = rtrim($set,',');<br />
if(is_array($condition)){<br />
$condition = $this-&gt;parse_condition($condition);<br />
}<br />
$sql = "update `".DB_PREFIX.$table."` set $set where $condition";<br />
return $this-&gt;query($sql);<br />
}<br />
/**<br />
* 插入数据方法<br />
* 输入表名，数据array('字段'=&gt;'值')<br />
* 返回布尔<br />
*/<br />
function insert($table,$data) {</p>
<p>$fields = array();<br />
$values = array();</p>
<p>foreach( $data as $key=&gt; $val){<br />
if(is_array($val)){<br />
$_values = array();<br />
$_fields = array();<br />
foreach( $val as $k=&gt; $v){<br />
$_fields[]= "`$k`";<br />
$_values[]= "'{$v}'";<br />
}<br />
$fields = $_fields;<br />
$values[] = '('.implode(',',$_values).')';<br />
}<br />
else{<br />
$fields[] = "`$key`";<br />
$values[] = "'{$val}'";<br />
}<br />
}<br />
$fields = implode(',',$fields);<br />
$values = implode(',',$values);<br />
$sql = "insert into `".DB_PREFIX.$table."` ($fields) values($values)";<br />
return $this-&gt;query($sql);<br />
}<br />
/**<br />
* 删除数据方法<br />
* 输入表名，条件<br />
* 返回bool<br />
*/<br />
function delete($table,$condition) {</p>
<p>if(empty($condition)){<br />
die('条件不能为空');<br />
}<br />
if(is_array($condition)){<br />
$condition = $this-&gt;parse_condition($condition);<br />
}<br />
$sql = "delete from `".DB_PREFIX.$table."` where $condition";<br />
return $this-&gt;query($sql);<br />
}<br />
/**<br />
* 解析条件的函数<br />
* @param 条件数组<br />
* &lt;code&gt;<br />
$arr[] = "`id`==0";<br />
$arr[] = "`id`==5";<br />
$arr['id'] = "5";<br />
$arr['or'][] = "`id`!=2";<br />
$arr['or'][] = "`id`!=1";<br />
$arr['or'][] = "`id`!=2";<br />
$arr['groups'][]='id';<br />
$arr['orders']['id']='asc';<br />
$arr['orders']['td']='DESC';<br />
* &lt;/code&gt;<br />
* @return str<br />
**/<br />
function parse_condition($condition){<br />
$and = '1';<br />
$or = '0';<br />
$groups = array();<br />
$orders = array();<br />
foreach( $condition as $key=&gt;$val){<br />
if(is_numeric($key)){<br />
$and .= " and $val";<br />
}<br />
elseif(strtolower($key)== 'or'){<br />
//处理or条件<br />
if(is_array($val)){<br />
foreach( $val as $k=&gt;$v){<br />
if(is_numeric($k)){<br />
$or .= " or {$v}";<br />
}<br />
elseif(is_array($v)){<br />
$v = implode(',',$v);<br />
$or .= " or `$k` in ($v)";<br />
}else{<br />
$or .= " or `$k='{$v}'";<br />
}<br />
}</p>
<p>}else{<br />
$or .= " or $val'";<br />
}<br />
}<br />
elseif(strtolower($key)== 'groups'){<br />
//处理group by<br />
foreach( $val as $k=&gt;$v){<br />
$groups[] = $v;<br />
}</p>
<p>}elseif(strtolower($key)== 'orders'){<br />
//处理order by<br />
foreach( $val as $k=&gt;$v){<br />
$orders[] = $k.' '.$v;<br />
}</p>
<p>}else{<br />
if(is_array($val)){<br />
$val = implode(',',$val);<br />
$and .= " and `$key` in ($val)";<br />
}else{<br />
$and .= " and `$key`='{$val}'";<br />
}<br />
}<br />
}<br />
if($and!='1' &amp;&amp; $or!='0')$where = $and.' or '.$or;<br />
elseif($and!='1') $where = $and;<br />
elseif($or!='0') $where = $or;<br />
if($groups)$where .= " group by ".implode(',',$groups);<br />
if($orders)$where .= " order by ".implode(',',$orders);<br />
$where = str_replace('1 and','',str_replace('0 or','',$where));</p>
<p>return $where;<br />
}<br />
/**<br />
* 锁表方法<br />
* 输入表名，锁定类型，r or w 写锁要放在读锁前面<br />
* 返回bool<br />
*/<br />
function lock($table,$type='r') {</p>
<p>if($type=='r'){<br />
$type = 'READ';<br />
}<br />
else{<br />
$type = 'WRITE';<br />
}<br />
$sql = "lock table `".DB_PREFIX.$table."` $type";<br />
return $this-&gt;query($sql);<br />
}<br />
/**<br />
* 解锁表方法<br />
*<br />
* 返回bool<br />
*/<br />
function unlock( ) {</p>
<p>$sql = "unlock tables";<br />
return $this-&gt;query($sql);<br />
}<br />
/**<br />
* 结果集放入数组方法<br />
* 返回数组，指针下移<br />
*/</p>
<p>function fetch($row) {</p>
<p>return mysql_fetch_array($row,MYSQL_ASSOC);</p>
<p>}</p>
<p>/**<br />
* 计算结果集行数方法<br />
* 输入$row<br />
* 返回行数<br />
*/</p>
<p>function num_rows($row) {</p>
<p>return  mysql_num_rows($row);</p>
<p>}</p>
<p>/**<br />
* 计算结果集列数方法<br />
* 输入$row<br />
* 返回列数<br />
*/</p>
<p>function num_fields($row) {</p>
<p>return mysql_num_fields($row);</p>
<p>}</p>
<p>/**<br />
* 释放result结果集内存<br />
* 返回布尔值<br />
*/</p>
<p>function free_result($row) {</p>
<p>return  mysql_free_result($row);</p>
<p>}</p>
<p>/**<br />
* 查看指定表的字段名<br />
* 输入表名<br />
* 返回全部字段名数组<br />
*/<br />
function list_fields($table) {<br />
$fields = mysql_list_fields(DB_NAME, DB_PREFIX.$table, $this-&gt;links);<br />
$columns = mysql_num_fields($fields);</p>
<p>for ($i = 0; $i &lt; $columns; $i++) {<br />
$row[$i] = mysql_field_name($fields, $i);<br />
}<br />
return $row;</p>
<p>}</p>
<p>/**<br />
* 查看数据库版本方法<br />
*/</p>
<p>function version() {<br />
return  mysql_get_server_info();</p>
<p>}</p>
<p>/**<br />
* 插入时查看插入ID<br />
*/</p>
<p>function insert_id() {<br />
return  mysql_insert_id();</p>
<p>}<br />
/**<br />
* 分页方法<br />
*/</p>
<p>function page($table,$condition='1',$pagesize=20,$id='page') {<br />
$page = $_GET[$id];<br />
if(!$page)$page= 0 ;<br />
elseif(!is_numeric($page))die('分页出错');</p>
<p>//查找结果集<br />
$p = $page * $pagesize;<br />
$limit = $p.",".$pagesize;<br />
$results = $this-&gt;readall($table,$condition,$limit);</p>
<p>//取得结果集行数<br />
$num = $this-&gt;count($table,$condition);<br />
//定义最后页 $maxpage<br />
if ($num % $pagesize) {<br />
$maxpage = (int) ($num / $pagesize +1);<br />
} else<br />
$maxpage = $num / $pagesize;<br />
if(STATICS){<br />
//从服务器端取得url信息</p>
<p>if($_GET[$id] === null){<br />
$_SERVER["REQUEST_URI"] = str_replace('index.php','',$_SERVER["REQUEST_URI"]);<br />
$_SESSION[$id] = str_replace('.html','',$_SERVER["REQUEST_URI"],$count);<br />
$_SESSION[$id] = $count?$_SESSION[$id] :$_SESSION[$id].'index';<br />
if(!sizeof($_GET))$_SESSION[$id].="-htm";<br />
}<br />
$str = "&lt;div class=pg style=padding-top:25px;&gt;&lt;a href=$_SESSION[$id]-".$id."-0.html&gt;First&lt;/a&gt; ";<br />
if($page)$str .= "&lt;a href=$_SESSION[$id]-".$id."-".($page-1).".html&gt;Previous&lt;/a&gt; ";<br />
if($page-3&gt;=0)$str .="&lt;a href=$_SESSION[$id]-".$id."-".($page-3).".html&gt;".($page-2)."&lt;/a&gt; ";<br />
if($page-2&gt;=0)$str .="&lt;a href=$_SESSION[$id]-".$id."-".($page-2).".html&gt;".($page-1)."&lt;/a&gt; ";<br />
if($page-1&gt;=0)$str .="&lt;a href=$_SESSION[$id]-".$id."-".($page-1).".html&gt;".$page."&lt;/a&gt; ";<br />
if($page &lt; $maxpage)$str .=($page+1)." ";<br />
if($page+1 &lt; $maxpage)$str .="&lt;a href=$_SESSION[$id]-".$id."-".($page+1).".html&gt;".($page+2)."&lt;/a&gt; ";<br />
if($page+2 &lt; $maxpage)$str .="&lt;a href=$_SESSION[$id]-".$id."-".($page+2).".html&gt;".($page+3)."&lt;/a&gt; ";<br />
if($page+3 &lt; $maxpage)$str .="&lt;a href=$_SESSION[$id]-".$id."-".($page+3).".html&gt;".($page+4)."&lt;/a&gt; ";<br />
if($page+1 &lt; $maxpage)$str .="&lt;a href=$_SESSION[$id]-".$id."-".($page+1).".html&gt;Next&lt;/a&gt; ";<br />
if(!$maxpage)$maxpage=1;<br />
$str .="&lt;a href=$_SESSION[$id]-".$id."-".($maxpage-1).".html&gt;Last&lt;/a&gt; &lt;a href=javascript:;&gt; ".($page+1)."/".$maxpage."Total&lt;/a&gt; &lt;/div&gt;";<br />
}<br />
else{<br />
//从服务器端取得url信息</p>
<p>if($_GET[$id] === null){<br />
$_SESSION[$id] = $_SERVER["REQUEST_URI"];<br />
if(!sizeof($_GET))$_SESSION[$id].="?p=1";</p>
<p>}</p>
<p>$str = "&lt;div class=pg style=padding-top:25px;&gt;&lt;a href=$_SESSION[$id]&amp;".$id."=0&gt;First&lt;/a&gt; ";<br />
if($page)$str .= "&lt;a href=$_SESSION[$id]&amp;".$id."=".($page-1)."&gt;Previous&lt;/a&gt; ";<br />
if($page-3&gt;=0)$str .="&lt;a href=$_SESSION[$id]&amp;".$id."=".($page-3)."&gt;".($page-2)."&lt;/a&gt; ";<br />
if($page-2&gt;=0)$str .="&lt;a href=$_SESSION[$id]&amp;".$id."=".($page-2)."&gt;".($page-1)."&lt;/a&gt; ";<br />
if($page-1&gt;=0)$str .="&lt;a href=$_SESSION[$id]&amp;".$id."=".($page-1)."&gt;".$page."&lt;/a&gt; ";<br />
if($page &lt; $maxpage)$str .=($page+1)." ";<br />
if($page+1 &lt; $maxpage)$str .="&lt;a href=$_SESSION[$id]&amp;".$id."=".($page+1)."&gt;".($page+2)."&lt;/a&gt; ";<br />
if($page+2 &lt; $maxpage)$str .="&lt;a href=$_SESSION[$id]&amp;".$id."=".($page+2)."&gt;".($page+3)."&lt;/a&gt; ";<br />
if($page+3 &lt; $maxpage)$str .="&lt;a href=$_SESSION[$id]&amp;".$id."=".($page+3)."&gt;".($page+4)."&lt;/a&gt; ";<br />
if($page+1 &lt; $maxpage)$str .="&lt;a href=$_SESSION[$id]&amp;".$id."=".($page+1)."&gt;Next&lt;/a&gt; ";<br />
if(!$maxpage)$maxpage=1;<br />
$str .="&lt;a href=$_SESSION[$id]&amp;".$id."=".($maxpage-1)."&gt;Last&lt;/a&gt; &lt;a href=javascript:;&gt; ".($page+1)."/".$maxpage."Total&lt;/a&gt; &lt;/div&gt;";<br />
}<br />
return array($results,$str);<br />
}</p>
<p>/**<br />
* 左连接多表查询<br />
* @param<br />
* @return<br />
**/<br />
function leftjoin($left,$right,$on,$condition,$limit=1){<br />
$left = explode('.',$left);<br />
$right = explode('.',$right);<br />
$left['0'] = "`".DB_PREFIX.$left['0']."`";<br />
$right['0'] = "`".DB_PREFIX.$right['0']."`";<br />
if($left['1'] || $right['1']){<br />
$fields = '';<br />
if(!empty($left['1'])){<br />
$_field = explode(',',$left['1']);<br />
foreach( $_field as $one){<br />
$fields.=$left['0'].'.`'.$one."`,";<br />
}<br />
}<br />
if(!empty($right['1'])){<br />
$_field = explode(',',$right['1']);<br />
foreach( $_field as $one){<br />
$fields.=$right['0'].".`".$one."`,";<br />
}<br />
}<br />
$fields = rtrim($fields,',');<br />
}<br />
else{<br />
$fields = '*';<br />
}<br />
$on = str_replace('\2',$right[0],str_replace('\1',$left[0],$on));<br />
$condition = str_replace('\2',$right[0],str_replace('\1',$left[0],$condition));<br />
$sql = "SELECT {$fields} FROM {$left[0]} LEFT JOIN {$right[0]}  ON ( {$on} ) WHERE ( {$condition} ) LIMIT {$limit} ";</p>
<p>$query = $this-&gt;query($sql);<br />
$field_num = mysql_num_fields($query);<br />
while($arr = mysql_fetch_array($query,MYSQL_NUM)){<br />
$_arr = array();<br />
for( $i=0 ; $i&lt;$field_num ; $i++ ){<br />
$table = str_replace(DB_PREFIX,'',mysql_field_table($query, $i));<br />
$field = mysql_field_name($query, $i);<br />
$_arr[$table.'.'.$field] = $arr[$i];<br />
}<br />
$array[]=$_arr;</p>
<p>}<br />
$array=$limit==1?$arrat[0]:$array;<br />
return $array;<br />
}<br />
/**<br />
* 用于创建一个表结构<br />
* @param 表名，结构 array(字段，格式，注释) 表注释 索引array(字段，字段) 全文搜索(字段，字段)<br />
* @return 打印<br />
**/</p>
<p>function createTable($tablename,$data,$comment='',$key='',$fulltext=''){<br />
$_key='';<br />
$_type = '';<br />
$_fulltext = '';<br />
$tablename = DB_PREFIX.$tablename;<br />
$sql = "CREATE TABLE IF NOT EXISTS `$tablename` (<br />
`id` int(10) unsigned NOT NULL auto_increment COMMENT 'ID',<br />
";<br />
foreach( $data as $one){<br />
switch($one[1]){<br />
case '':<br />
$_type = 'varchar(255)';<br />
break;<br />
case 'tinyint':<br />
$_type = 'tinyint(1)';<br />
break;<br />
case 'time':<br />
$_type = 'int(10)';<br />
break;<br />
default:</p>
<p>if(strpos($one[1],'.')!==false){<br />
$_type = explode('.',$one[1]);<br />
$_type = $_type[0].'('.$_type[1].')';<br />
}<br />
else{<br />
$_type = $one[1];<br />
}<br />
break;<br />
}<br />
$sql.="`{$one[0]}` $_type NOT NULL COMMENT '{$one[2]}',<br />
";<br />
}</p>
<p>if(!empty($key)){<br />
foreach( $key as $one){<br />
$_key.="KEY `$one` (`$one`),<br />
";<br />
}<br />
}<br />
if(!empty($fulltext)){<br />
foreach( $fulltext as $one){<br />
$_key.="FULLTEXT `$one` (`$one`),<br />
";<br />
}<br />
}</p>
<p>$sql.= $_key.$_fulltext."PRIMARY KEY  (`id`)<br />
) ENGINE=MyISAM DEFAULT CHARSET=".CHARSET." COMMENT '$comment';<br />
";<br />
if(!$_GET[sure]){</p>
<p>if(empty($_GET)){<br />
$url = '?sure=1';</p>
<p>}<br />
else{<br />
$url = $_SERVER["REQUEST_URI"].'&amp;sure=1';<br />
}</p>
<p>echo "即将执行以下建表操作：&lt;br&gt;&lt;pre&gt;$sql&lt;a href=$url&gt;确定&lt;/a&gt;&lt;/pre&gt;";<br />
}<br />
elseif($_GET[sure] &amp;&amp; $this-&gt;query($sql)){</p>
<p>echo "完成操作";<br />
}<br />
else{<br />
echo "操作失败：&lt;br&gt;&gt;&lt;pre&gt;$sql&lt;/pre&gt;";<br />
}</p>
<p>exit;</p>
<p>}<br />
};</p>
<p>//实例</p>
<p>define("DB_HOST", 'localhost');<br />
define("DB_USER", 'root');<br />
define("DB_PWD", '');<br />
define("DB_NAME", "test");<br />
define("DB_PREFIX", "test_");<br />
define('CHARSET', 'gbk'); // 编码<br />
define("GEBUG", 1);</p>
<p>//建表<br />
$Db=new Db();<br />
$data[] = array('title','','标题');<br />
$data[] = array('open','tinyint.1','是否公开');<br />
$data[] = array('keyword','','关键词');<br />
$data[] = array('content','text','内容');<br />
$data[] = array('created','time','时间');<br />
//$Db-&gt;createTable('article',$data,'文章表');<br />
//增删改查<br />
$data['title']='t';<br />
$data['keyword']='k';<br />
$Db-&gt;insert('article',$data);<br />
$num = $Db-&gt;read('article.id','1 order by id desc');<br />
$data['created'] = mktime()+$num['id'];<br />
$Db-&gt;update('article',$data,"`id` =2");<br />
$Db-&gt;delete('article',"`id` =3");</p>
<p>?&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zui88.com/blog/view-368.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>mysql字符串替换函数replace</title>
		<link>http://www.zui88.com/blog/view-230.html</link>
		<comments>http://www.zui88.com/blog/view-230.html#comments</comments>
		<pubDate>Sat, 27 Aug 2011 15:07:47 +0000</pubDate>
		<dc:creator>lin</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.zui88.com/blog/?p=230</guid>
		<description><![CDATA[mysql替换字符串函数replace可以实现把某字段的某些字符串替换成其他字符串，例如 update dede_addonarticle set body=replace(body,'news/uploads/allimg/c110826','news/uploads/blank.gif?') 可以把dedecms的文章内容表所有的图片链接替换成空白图片，这样就可以去把已经上传的大量图片删除以节省空间了，在对采集回来的数据尤其有用。]]></description>
			<content:encoded><![CDATA[<p>mysql替换字符串函数replace可以实现把某字段的某些字符串替换成其他字符串，例如</p>
<p>update dede_addonarticle set body=replace(body,'news/uploads/allimg/c110826','news/uploads/blank.gif?')</p>
<p>可以把dedecms的文章内容表所有的图片链接替换成空白图片，这样就可以去把已经上传的大量图片删除以节省空间了，在对采集回来的数据尤其有用。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zui88.com/blog/view-230.html/feed</wfw:commentRss>
		<slash:comments>323</slash:comments>
		</item>
		<item>
		<title>phpmyadmin里MySQL字符集:cp1252 West European (latin1) ，解决乱码问题</title>
		<link>http://www.zui88.com/blog/view-209.html</link>
		<comments>http://www.zui88.com/blog/view-209.html#comments</comments>
		<pubDate>Fri, 26 Aug 2011 06:54:49 +0000</pubDate>
		<dc:creator>lin</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[phpmyadmin]]></category>

		<guid isPermaLink="false">http://www.zui88.com/blog/?p=209</guid>
		<description><![CDATA[使用虚拟主机空间上的phpmyadmin操作数据库的时候，如果看到phpmyadmin首页上显示的MySQL 字符集为cp1252 West European (latin1)，当我们导入数据时就会出现乱码，解决的方法是： 在phpmyadmin首页的右边有个Language选项，把默认的中文 - Chinese simplified-gb2312改成 中文 - Chinese simplified，则左边的MySQL 字符集会变成UTF-8 Unicode (utf8) ，乱码问题得到解决！]]></description>
			<content:encoded><![CDATA[<p>使用虚拟主机空间上的phpmyadmin操作数据库的时候，如果看到phpmyadmin首页上显示的MySQL 字符集为cp1252 West European (latin1)，当我们导入数据时就会出现乱码，解决的方法是：</p>
<p>在phpmyadmin首页的右边有个Language选项，把默认的<span class="nodeLabelBox repTarget "><span class="nodeText editable "><span class="  ">中文 - Chinese simplified-gb2312改成 </span></span></span><span class="nodeLabelBox repTarget "><span class="nodeText editable "><span class="  ">中文 - Chinese simplified，则左边的</span></span></span>MySQL 字符集会变成UTF-8 Unicode (utf8) ，乱码问题得到解决！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zui88.com/blog/view-209.html/feed</wfw:commentRss>
		<slash:comments>296</slash:comments>
		</item>
		<item>
		<title>phpmyadmin 默认数据库引擎修改为myisam</title>
		<link>http://www.zui88.com/blog/view-181.html</link>
		<comments>http://www.zui88.com/blog/view-181.html#comments</comments>
		<pubDate>Thu, 25 Aug 2011 04:24:42 +0000</pubDate>
		<dc:creator>lin</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.zui88.com/blog/?p=181</guid>
		<description><![CDATA[phpmyadmin 默认创建的数据库默认的数据库引擎为innodb，如果希望修改为灵活性更高的myisam 在my.ini找到default-storage-engine=innodb，修改为myisam]]></description>
			<content:encoded><![CDATA[<div id="content">
<div>phpmyadmin 默认创建的数据库默认的数据库引擎为innodb，如果希望修改为灵活性更高的myisam</div>
<div>在my.ini找到default-storage-engine=innodb，修改为myisam</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.zui88.com/blog/view-181.html/feed</wfw:commentRss>
		<slash:comments>356</slash:comments>
		</item>
		<item>
		<title>Mysql查询数据表中某字段重复出现的次数，并按照次数排序</title>
		<link>http://www.zui88.com/blog/view-90.html</link>
		<comments>http://www.zui88.com/blog/view-90.html#comments</comments>
		<pubDate>Sat, 13 Aug 2011 18:29:55 +0000</pubDate>
		<dc:creator>lin</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[count(*)]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.zui88.com/blog/?p=90</guid>
		<description><![CDATA[利用Mysql中的 的聚合函数 count(*) 可以实现这个功能，例如需要查询data表中name出现次数最多的记录，可以先按照group by name分组，用count算出分组里的条数，再按照count排序： select name,count(*) from data group by name order by count(*) DESC limit 1 不加limit限制将返回按照name重复次数排列的数据]]></description>
			<content:encoded><![CDATA[<div style="line-height: 25px;">
<p>利用Mysql中的 的聚合函数 count(*) 可以实现这个功能，例如需要查询data表中name出现次数最多的记录，可以先按照group by name分组，用count算出分组里的条数，再按照count排序：</p>
<p>select name,count(*) from data group by name order by count(*) DESC limit 1</p>
<p>不加limit限制将返回按照name重复次数排列的数据</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.zui88.com/blog/view-90.html/feed</wfw:commentRss>
		<slash:comments>419</slash:comments>
		</item>
		<item>
		<title>Mysql Having的用法：对group by之后的分组加限制条件</title>
		<link>http://www.zui88.com/blog/view-88.html</link>
		<comments>http://www.zui88.com/blog/view-88.html#comments</comments>
		<pubDate>Sat, 13 Aug 2011 18:27:50 +0000</pubDate>
		<dc:creator>lin</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[group by]]></category>
		<category><![CDATA[having]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.zui88.com/blog/?p=88</guid>
		<description><![CDATA[在使用聚合函数之前，我们可以通过where对查询加限制条件，那么如果在group by之后我们要对分组里面的数据再加限制条件怎么办呢？答案是having。 HAVING子句可以让我们筛选成组后的各组数据． WHERE子句在聚合前先筛选记录．也就是说作用在GROUP BY 子句和HAVING子句前． 而 HAVING子句在聚合后对组记录进行筛选。 having子句出现的数据必须在group by 之后，order by 之后 例如在上一篇中对name按照出现次数排序之后，我们还想只查出名字里面含有lin的数据，可以这样写： select name ,count(*) from data group by name having name like '%lin%' order by couny(*) DESC]]></description>
			<content:encoded><![CDATA[<div style="line-height: 25px;">
<p>在使用聚合函数之前，我们可以通过where对查询加限制条件，那么如果在group by之后我们要对分组里面的数据再加限制条件怎么办呢？答案是having。</p>
<p>HAVING子句可以让我们筛选成组后的各组数据．<br />
WHERE子句在聚合前先筛选记录．也就是说作用在GROUP BY 子句和HAVING子句前．<br />
而 HAVING子句在聚合后对组记录进行筛选。</p>
<p>having子句出现的数据必须在group by 之后，order by 之后</p>
<p>例如在上一篇中对name按照出现次数排序之后，我们还想只查出名字里面含有lin的数据，可以这样写：</p>
<p>select name ,count(*)  from data group by name having name like '%lin%' order by couny(*) DESC</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.zui88.com/blog/view-88.html/feed</wfw:commentRss>
		<slash:comments>683</slash:comments>
		</item>
		<item>
		<title>Mysql 子查询的用法</title>
		<link>http://www.zui88.com/blog/view-69.html</link>
		<comments>http://www.zui88.com/blog/view-69.html#comments</comments>
		<pubDate>Sat, 13 Aug 2011 17:00:34 +0000</pubDate>
		<dc:creator>lin</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[子查询]]></category>

		<guid isPermaLink="false">http://www.zui88.com/blog/?p=69</guid>
		<description><![CDATA[一，子选择基本用法 1，子选择的定义 子迭择允许把一个查询嵌套在另一个查询当中。比如说：一个考试记分项目把考试事件分为考试（T）和测验（Q）两种情形。下面这个查询就能只找出学生们的考试成绩 select * from score where event_id in (select event_id from event where type='T'); 2，子选择的用法（3种）  用子选择来生成一个参考值 在这种情况下，用内层的查询语句来检索出一个数据值，然后把这个数据值用在外层查询语句的比较操作中。比如说，如果要查询表中学生们在某一天的测验成绩，就应该使用一个内层查询先找到这一天的测验的事件号，然后在外层查询语句中用这个事件号在成绩表里面找到学生们的分数记录。具体语句为： select * from score where id=(select event_id from event where date='2002-03-21' and type='Q'); 需要注意的是：在应用这种内层查询的结果主要是用来进行比较操作的分法时，内层查询应该只有一个输出结果才对。看例子，如果想知道哪个美国总统的生日最小，构造下列查询 select * from president where birth=min(birth) 这个查询是错的！因为MySQL不允许在子句里面使用统计函数！min()函数应该有一个确定的参数才能工作!所以我们改用子选择: select * from president where birht=(select min(birth) from presidnet);  exists 和 not exists [...]]]></description>
			<content:encoded><![CDATA[<p>一，子选择基本用法<br />
1，子选择的定义<br />
子迭择允许把一个查询嵌套在另一个查询当中。比如说：一个考试记分项目把考试事件分为考试（T）和测验（Q）两种情形。下面这个查询就能只找出学生们的考试成绩<br />
select * from score where event_id in (select event_id from event where type='T');<br />
2，子选择的用法（3种）<br />
 用子选择来生成一个参考值<br />
在这种情况下，用内层的查询语句来检索出一个数据值，然后把这个数据值用在外层查询语句的比较操作中。比如说，如果要查询表中学生们在某一天的测验成绩，就应该使用一个内层查询先找到这一天的测验的事件号，然后在外层查询语句中用这个事件号在成绩表里面找到学生们的分数记录。具体语句为：<br />
select * from score where<br />
id=(select event_id from event where date='2002-03-21' and type='Q');<br />
需要注意的是：在应用这种内层查询的结果主要是用来进行比较操作的分法时，内层查询应该只有一个输出结果才对。看例子，如果想知道哪个美国总统的生日最小，构造下列查询<br />
select * from president where birth=min(birth)<br />
这个查询是错的！因为MySQL不允许在子句里面使用统计函数！min()函数应该有一个确定的参数才能工作!所以我们改用子选择:<br />
select * from president where birht=(select min(birth) from presidnet);<br />
 exists 和 not exists 子选择<br />
上一种用法是把查间结果由内层传向外层、本类用法则相反，把外层查询的结果传递给内层。看外部查询的结果是否满足内部查间的匹配径件。这种"由外到内"的子迭择用法非常适合用来检索某个数据表在另外一个数据表里面有设有匹配的记录</p>
<p>数据表t1 数据表t2<br />
I1 C1 I2 C2<br />
1<br />
2<br />
3 A</p>
<p>C 2<br />
3<br />
4 C</p>
<p>A<br />
先找两个表内都存在的数据<br />
select i1 from t1 where exists(select * from t2 where t1.i1=t2.i2);<br />
再找t1表内存在,t2表内不存在的数据<br />
select i1 form t1 where not exists(select * from t2 where t1.i1=t2.i2);</p>
<p>需要注意：在这两种形式的子选择里，内层查询中的星号代表的是外层查询的输出结果。内层查询没有必要列出有关数据列的名字，田为内层查询关心的是外层查询的结果有多少行。希望大家能够理解这一点<br />
 in 和not in 子选择<br />
在这种子选择里面，内层查询语句应该仅仅返回一个数据列，这个数据列里的值将由外层查询语句中的比较操作来进行求值。还是以上题为例<br />
先找两个表内都存在的数据<br />
select i1 from t1 where i1 in (select i2 from t2);<br />
再找t1表内存在,t2表内不存在的数据<br />
select i1 form t1 where i1 not in (select i2 from t2);<br />
好象这种语句更容易让人理解，再来个例子<br />
比如你想找到所有居住在A和B的学生。<br />
select * from student where state in('A','B')<br />
二， 把子选择查询改写为关联查询的方法。<br />
1，匹配型子选择查询的改写<br />
下例从score数据表里面把学生们在考试事件（T）中的成绩（不包括测验成绩！）查询出来。<br />
Select * from score where event_id in (select event_id from event where type='T');<br />
可见，内层查询找出所有的考试事件，外层查询再利用这些考试事件搞到学生们的成绩。<br />
这个子查询可以被改写为一个简单的关联查询：<br />
Select score.* from score, event where score.event_id=event.event_id and event.event_id='T';<br />
下例可以用来找出所有女学生的成绩。<br />
Select * from score where student_id in (select student_id form student where sex = 'f');<br />
可以把它转换成一个如下所示的关联查询：<br />
Select * from score<br />
Where student _id =student.student_id and student.sex ='f';<br />
把匹配型子选择查询改写为一个关联查询是有规律可循的。下面这种形式的子选择查询：<br />
Select * from tablel<br />
Where column1 in (select column2a from table2 where column2b = value);<br />
可以转换为一个如下所示的关联查询：<br />
Select tablel. * from tablel,table2<br />
Where table.column1 = table2.column2a and table2.column2b = value;<br />
(2)非匹配(即缺失)型子选择查询的改写<br />
子选择查询的另一种常见用途是查找在某个数据表里有、但在另一个数据表里却没有的东西。正如前面看到的那样，这种"在某个数据表里有、在另一个数据表里没有"的说法通常都暗示着可以用一个left join 来解决这个问题。请看下面这个子选择查询，它可以把没有出现在absence数据表里的学生(也就是那些从未缺过勤的学生)给查出来：<br />
Select * from student<br />
Where student_id not in (select student_id from absence);<br />
这个子选择查询可以改写如下所示的left join 查询：<br />
Select student. *<br />
From student left join absence on student.student_id =absence.student_id<br />
Where absence.student_id is null;<br />
把非匹配型子选择查询改写为关联查询是有规律可循的。下面这种形式的子选择查询：<br />
Select * from tablel<br />
Where column1 not in (select column2 from table2);<br />
可以转换为一个如下所示的关联查询：<br />
Select tablel . *<br />
From tablel left join table2 on tablel.column1=table2.column2<br />
Where table2.column2 is null;<br />
注意：这种改写要求数据列table2.column2声明为not null。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zui88.com/blog/view-69.html/feed</wfw:commentRss>
		<slash:comments>337</slash:comments>
		</item>
		<item>
		<title>mysql数据库的优化</title>
		<link>http://www.zui88.com/blog/view-67.html</link>
		<comments>http://www.zui88.com/blog/view-67.html#comments</comments>
		<pubDate>Sat, 13 Aug 2011 16:58:34 +0000</pubDate>
		<dc:creator>lin</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[优化]]></category>

		<guid isPermaLink="false">http://www.zui88.com/blog/?p=67</guid>
		<description><![CDATA[影响数据库性能的根源： 1，磁盘I/O读取 2，CPU使用率 3，资源竞争 优化的方式： 1，设计优化 2，操作优化 3，使用其他优化技术 1）设计优化： 分类拆分数据量大的表； 选取最适用的字段属性； 索引设计，为经常查询用到的字段建立索引，避免查询时查找其他重复无用的数据，避免了大范围扫描； 2）操作优化： 锁表操作； 尽量避免子查询，将子查询转化成连接查询； where子句查询条件尽量少使用运算操作； A&#62;2与A&#62;=3的效果有很大的区别了，因为A&#62;2时数据库会先找出为2的记录索引再进行比较，而A&#62;=3时ORACLE则直接找到=3的记录索引； a is not null 改为 a&#62;0 或a&#62;''等，判断字段是否为空一般是不会应用索引的； a&#60;&#62;0 改为 a&#62;0 or a&#60;0 ，不等于操作符是永远不会用到索引的，因此对它的处理只会产生全表扫描； YY_BH LIKE '%5400%' 这个条件会产生全表扫描，如果改成YY_BH LIKE 'X5400%' OR YY_BH LIKE 'B5400%' 则会利用YY_BH的索引进行两个范围的查询，性能肯定大大提高； WHERE后面的条件顺序影响 ，应该先把范围小的条件放前面，在小范围里面按接下来的条件查找； 3)其他优化技术 使用数据缓存技术，如memcached； 使用静态存储，对一些更新不频繁但经常调用的数据采用静态文本的存储方式；]]></description>
			<content:encoded><![CDATA[<div style="line-height: 25px;">
<p><strong>影响数据库性能的根源：</strong></p>
<p>1，磁盘I/O读取</p>
<p>2，CPU使用率</p>
<p>3，资源竞争</p>
<p><strong>优化的方式：</strong></p>
<p>1，设计优化</p>
<p>2，操作优化</p>
<p>3，使用其他优化技术</p>
<p>1）设计优化：</p>
<p>    分类拆分数据量大的表；<br />
    选取最适用的字段属性；<br />
    索引设计，为经常查询用到的字段建立索引，避免查询时查找其他重复无用的数据，避免了大范围扫描；</p>
<p>2）操作优化：</p>
<p>    锁表操作；<br />
    尽量避免子查询，将子查询转化成连接查询；<br />
    where子句查询条件尽量少使用运算操作；<br />
    A&gt;2与A&gt;=3的效果有很大的区别了，因为A&gt;2时数据库会先找出为2的记录索引再进行比较，而A&gt;=3时ORACLE则直接找到=3的记录索引；<br />
    a is not null 改为 a&gt;0 或a&gt;''等，判断字段是否为空一般是不会应用索引的；<br />
    a&lt;&gt;0 改为 a&gt;0 or a&lt;0 ，不等于操作符是永远不会用到索引的，因此对它的处理只会产生全表扫描；    YY_BH LIKE '%5400%' 这个条件会产生全表扫描，如果改成YY_BH LIKE 'X5400%' OR YY_BH LIKE 'B5400%' 则会利用YY_BH的索引进行两个范围的查询，性能肯定大大提高；<br />
    WHERE后面的条件顺序影响 ，应该先把范围小的条件放前面，在小范围里面按接下来的条件查找；</p>
<p>3)其他优化技术</p>
<p>    使用数据缓存技术，如memcached；<br />
    使用静态存储，对一些更新不频繁但经常调用的数据采用静态文本的存储方式；</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.zui88.com/blog/view-67.html/feed</wfw:commentRss>
		<slash:comments>293</slash:comments>
		</item>
		<item>
		<title>mysql操作符in between</title>
		<link>http://www.zui88.com/blog/view-65.html</link>
		<comments>http://www.zui88.com/blog/view-65.html#comments</comments>
		<pubDate>Sat, 13 Aug 2011 16:57:30 +0000</pubDate>
		<dc:creator>lin</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[操作符]]></category>

		<guid isPermaLink="false">http://www.zui88.com/blog/?p=65</guid>
		<description><![CDATA[以下三条sql语句的效果是等效的： SELECT * FROM `logs` WHERE id = 1 or id = 2 or id = 3 SELECT * FROM `logs` WHERE id between 1 and 3 SELECT * FROM `logs` WHERE id in (1,2,3) 经过测试性能也是差不多，如果id是一个大数组那么最后一条书写会简单很多，可以利用php的 string implode ( string $glue , array $pieces ) 函数把数组组合成(implode(',',$array))也就是(1,2,3)这样的格式]]></description>
			<content:encoded><![CDATA[<div style="line-height: 25px;">
<p>以下三条sql语句的效果是等效的：</p>
<p>SELECT * FROM `logs` WHERE id = 1 or id = 2 or id = 3</p>
<p>SELECT * FROM `logs` WHERE id between 1 and 3</p>
<p>SELECT * FROM `logs` WHERE id in (1,2,3)</p>
<p>经过测试性能也是差不多，如果id是一个大数组那么最后一条书写会简单很多，可以利用php的</p>
<div class="methodsynopsis dc-description"><span class="type">string</span> <span class="methodname"><strong>implode</strong></span> ( <span class="methodparam"><span class="type">string</span> <tt class="parameter"><span style="font-family: Courier New; font-size: small;">$glue</span></tt></span> , <span class="methodparam"><span class="type">array</span> <tt class="parameter"><span style="font-family: Courier New; font-size: small;">$pieces</span></tt></span> )</div>
<p>函数把数组组合成(implode(',',$array))也就是(1,2,3)这样的格式</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.zui88.com/blog/view-65.html/feed</wfw:commentRss>
		<slash:comments>331</slash:comments>
		</item>
	</channel>
</rss>
