亚洲欧美激情国产综合久久,亚洲欧美高清国产精品,国产精品一区二区精 http://m.jartj.cn/blog 中山php|最優(yōu)網(wǎng)絡 Mon, 13 May 2013 04:56:43 +0000 en hourly 1 http://wordpress.org/?v=3.1.4 mysql STRICT_TRANS_TABLES嚴格模式下提示Field 'id' doesn't have a default value http://m.jartj.cn/blog/view-411.html http://m.jartj.cn/blog/view-411.html#comments Wed, 26 Sep 2012 03:42:48 +0000 lin http://m.jartj.cn/blog/?p=411 在別的服務器運行我的網(wǎng)站程序的時候,出現(xiàn)了Field 'id' doesn't have a default value 的提示,意思是這個值我沒有提交數(shù)據(jù),并且數(shù)據(jù)庫結(jié)構(gòu)沒有設置默認值,由于對方的mysql服務器開啟了STRICT_TRANS_TABLES嚴格模式,所以報錯了

解決方法是:

如果自己的服務器,有權(quán)限修改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

在別人的虛擬空間上當然不可能實現(xiàn),所以根本的解決方法還是修改自己的數(shù)據(jù)結(jié)構(gòu),把非空的字段加上默認值,以后設計數(shù)據(jù)庫要注意這一點,方便程序的移植

]]>
http://m.jartj.cn/blog/view-411.html/feed 431
移植方便的php數(shù)據(jù)庫操作類,建表增刪改查 http://m.jartj.cn/blog/view-368.html http://m.jartj.cn/blog/view-368.html#comments Wed, 30 May 2012 09:46:53 +0000 lin http://m.jartj.cn/blog/?p=368 <?php
/**
*
* 數(shù)據(jù)操作類
* @author Xiaoqiang
* @link //
* @copyright Xiaoqiang
* @version Svn $Id$
* @package
*/
class Db {

var $links;
// 構(gòu)造函數(shù),初始化數(shù)據(jù)庫(主機,用戶名,密碼,數(shù)據(jù)庫名)
function __construct() {

$this->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->query($char_sql);
}

/**
* ****************** 操作 ******************
*/
/**
* 增刪改查操作方法
* 輸入sql語句
* 返回布爾值或結(jié)果集$row
*/
function query($sql) {
if(DEBUG){
$render = mysql_query($sql) or die('query ERROR:'.mysql_error()."<br>sql語句出錯:" . $sql);
return $render;
}
else{
return mysql_query($sql);
}
}
/**
* 計算行數(shù)方法
* 輸入
* 結(jié)果數(shù)組
*/
function count($table,$condition='1') {

$sql = "select count(*) from `".DB_PREFIX.$table."` where $condition";
$result = $this->select($sql);
return $result[0]['count(*)'];
}
/**
* 原始的sql語句查操作方法
* 輸入sql語句
* 結(jié)果數(shù)組
*/
function select($sql) {
$row = $this->query($sql);
$results = array();
while($arr = $this->fetch($row)){
$results[] = $arr;
}
//$this->free_result($row);
return $results;
}

/**
* 檢查某字段是否存在某值
* @param 輸入表名.字段,值
* @return id 或者 false
**/
function check_exists($table,$val){
$render = false;
$tab = explode('.',$table);
if($tab['1'] && $tab['1']!='id'){
$fields = $tab['1'];
$table = "{$tab[0]}.id,{$fields}";
}
else{
$fields = 'id';
$table = $tab[0].".id";
}
$condition = "`$fields` = '{$val}'";
$detail = $this->read($table,$condition);
if($detail[$fields]){
$render = $detail['id'];
}
return $render;
}

/**
* 查詢多條數(shù)據(jù)方法
* 輸入表名.字段,字段;查詢條件,條數(shù)
* 如果條件是數(shù)組,則進入高級搜索模式
* 返回結(jié)果數(shù)組
*/
function readall($table,$condition='1',$limit='') {
$tab = explode('.',$table);
$table = $tab['0'];
if($tab['1']){
$fields = $tab['1'];
$fields_array =explode(',',$fields);
$fields = '';
foreach( $fields_array as $one){
$fields .= "`$one`,";
}
$fields = rtrim($fields,',');
}
else{
$fields = '*';
}
if(is_array($condition)){
$condition = $this->parse_condition($condition);
}
$sql = "select $fields from `".DB_PREFIX.$table."` where $condition";
if($limit)$sql .= " limit $limit";
return $this->select($sql);
}
/**
* 查詢單條數(shù)據(jù)方法
* 輸入表名.字段,字段;查詢條件
* 返回結(jié)果數(shù)組
*/
function read($table,$condition='1') {
$render = $this ->readall($table,$condition,1);
return $render[0];
}
/**
* 修改數(shù)據(jù)方法
* 輸入表名,插入數(shù)據(jù)array('字段'=>'值'),條件
* 返回布爾值
*/
function update($table,$data,$condition ) {

$set = '';
foreach( $data as $key=>$val){
$set .= "`$key` = '".$val."',";
}
$set = rtrim($set,',');
if(is_array($condition)){
$condition = $this->parse_condition($condition);
}
$sql = "update `".DB_PREFIX.$table."` set $set where $condition";
return $this->query($sql);
}
/**
* 插入數(shù)據(jù)方法
* 輸入表名,數(shù)據(jù)array('字段'=>'值')
* 返回布爾
*/
function insert($table,$data) {

$fields = array();
$values = array();

foreach( $data as $key=> $val){
if(is_array($val)){
$_values = array();
$_fields = array();
foreach( $val as $k=> $v){
$_fields[]= "`$k`";
$_values[]= "'{$v}'";
}
$fields = $_fields;
$values[] = '('.implode(',',$_values).')';
}
else{
$fields[] = "`$key`";
$values[] = "'{$val}'";
}
}
$fields = implode(',',$fields);
$values = implode(',',$values);
$sql = "insert into `".DB_PREFIX.$table."` ($fields) values($values)";
return $this->query($sql);
}
/**
* 刪除數(shù)據(jù)方法
* 輸入表名,條件
* 返回bool
*/
function delete($table,$condition) {

if(empty($condition)){
die('條件不能為空');
}
if(is_array($condition)){
$condition = $this->parse_condition($condition);
}
$sql = "delete from `".DB_PREFIX.$table."` where $condition";
return $this->query($sql);
}
/**
* 解析條件的函數(shù)
* @param 條件數(shù)組
* <code>
$arr[] = "`id`==0";
$arr[] = "`id`==5";
$arr['id'] = "5";
$arr['or'][] = "`id`!=2";
$arr['or'][] = "`id`!=1";
$arr['or'][] = "`id`!=2";
$arr['groups'][]='id';
$arr['orders']['id']='asc';
$arr['orders']['td']='DESC';
* </code>
* @return str
**/
function parse_condition($condition){
$and = '1';
$or = '0';
$groups = array();
$orders = array();
foreach( $condition as $key=>$val){
if(is_numeric($key)){
$and .= " and $val";
}
elseif(strtolower($key)== 'or'){
//處理or條件
if(is_array($val)){
foreach( $val as $k=>$v){
if(is_numeric($k)){
$or .= " or {$v}";
}
elseif(is_array($v)){
$v = implode(',',$v);
$or .= " or `$k` in ($v)";
}else{
$or .= " or `$k='{$v}'";
}
}

}else{
$or .= " or $val'";
}
}
elseif(strtolower($key)== 'groups'){
//處理group by
foreach( $val as $k=>$v){
$groups[] = $v;
}

}elseif(strtolower($key)== 'orders'){
//處理order by
foreach( $val as $k=>$v){
$orders[] = $k.' '.$v;
}

}else{
if(is_array($val)){
$val = implode(',',$val);
$and .= " and `$key` in ($val)";
}else{
$and .= " and `$key`='{$val}'";
}
}
}
if($and!='1' && $or!='0')$where = $and.' or '.$or;
elseif($and!='1') $where = $and;
elseif($or!='0') $where = $or;
if($groups)$where .= " group by ".implode(',',$groups);
if($orders)$where .= " order by ".implode(',',$orders);
$where = str_replace('1 and','',str_replace('0 or','',$where));

return $where;
}
/**
* 鎖表方法
* 輸入表名,鎖定類型,r or w 寫鎖要放在讀鎖前面
* 返回bool
*/
function lock($table,$type='r') {

if($type=='r'){
$type = 'READ';
}
else{
$type = 'WRITE';
}
$sql = "lock table `".DB_PREFIX.$table."` $type";
return $this->query($sql);
}
/**
* 解鎖表方法
*
* 返回bool
*/
function unlock( ) {

$sql = "unlock tables";
return $this->query($sql);
}
/**
* 結(jié)果集放入數(shù)組方法
* 返回數(shù)組,指針下移
*/

function fetch($row) {

return mysql_fetch_array($row,MYSQL_ASSOC);

}

/**
* 計算結(jié)果集行數(shù)方法
* 輸入$row
* 返回行數(shù)
*/

function num_rows($row) {

return mysql_num_rows($row);

}

/**
* 計算結(jié)果集列數(shù)方法
* 輸入$row
* 返回列數(shù)
*/

function num_fields($row) {

return mysql_num_fields($row);

}

/**
* 釋放result結(jié)果集內(nèi)存
* 返回布爾值
*/

function free_result($row) {

return mysql_free_result($row);

}

/**
* 查看指定表的字段名
* 輸入表名
* 返回全部字段名數(shù)組
*/
function list_fields($table) {
$fields = mysql_list_fields(DB_NAME, DB_PREFIX.$table, $this->links);
$columns = mysql_num_fields($fields);

for ($i = 0; $i < $columns; $i++) {
$row[$i] = mysql_field_name($fields, $i);
}
return $row;

}

/**
* 查看數(shù)據(jù)庫版本方法
*/

function version() {
return mysql_get_server_info();

}

/**
* 插入時查看插入ID
*/

function insert_id() {
return mysql_insert_id();

}
/**
* 分頁方法
*/

function page($table,$condition='1',$pagesize=20,$id='page') {
$page = $_GET[$id];
if(!$page)$page= 0 ;
elseif(!is_numeric($page))die('分頁出錯');

//查找結(jié)果集
$p = $page * $pagesize;
$limit = $p.",".$pagesize;
$results = $this->readall($table,$condition,$limit);

//取得結(jié)果集行數(shù)
$num = $this->count($table,$condition);
//定義最后頁 $maxpage
if ($num % $pagesize) {
$maxpage = (int) ($num / $pagesize +1);
} else
$maxpage = $num / $pagesize;
if(STATICS){
//從服務器端取得url信息

if($_GET[$id] === null){
$_SERVER["REQUEST_URI"] = str_replace('index.php','',$_SERVER["REQUEST_URI"]);
$_SESSION[$id] = str_replace('.html','',$_SERVER["REQUEST_URI"],$count);
$_SESSION[$id] = $count?$_SESSION[$id] :$_SESSION[$id].'index';
if(!sizeof($_GET))$_SESSION[$id].="-htm";
}
$str = "<div class=pg style=padding-top:25px;><a href=$_SESSION[$id]-".$id."-0.html>First</a> ";
if($page)$str .= "<a href=$_SESSION[$id]-".$id."-".($page-1).".html>Previous</a> ";
if($page-3>=0)$str .="<a href=$_SESSION[$id]-".$id."-".($page-3).".html>".($page-2)."</a> ";
if($page-2>=0)$str .="<a href=$_SESSION[$id]-".$id."-".($page-2).".html>".($page-1)."</a> ";
if($page-1>=0)$str .="<a href=$_SESSION[$id]-".$id."-".($page-1).".html>".$page."</a> ";
if($page < $maxpage)$str .=($page+1)." ";
if($page+1 < $maxpage)$str .="<a href=$_SESSION[$id]-".$id."-".($page+1).".html>".($page+2)."</a> ";
if($page+2 < $maxpage)$str .="<a href=$_SESSION[$id]-".$id."-".($page+2).".html>".($page+3)."</a> ";
if($page+3 < $maxpage)$str .="<a href=$_SESSION[$id]-".$id."-".($page+3).".html>".($page+4)."</a> ";
if($page+1 < $maxpage)$str .="<a href=$_SESSION[$id]-".$id."-".($page+1).".html>Next</a> ";
if(!$maxpage)$maxpage=1;
$str .="<a href=$_SESSION[$id]-".$id."-".($maxpage-1).".html>Last</a> <a href=javascript:;> ".($page+1)."/".$maxpage."Total</a> </div>";
}
else{
//從服務器端取得url信息

if($_GET[$id] === null){
$_SESSION[$id] = $_SERVER["REQUEST_URI"];
if(!sizeof($_GET))$_SESSION[$id].="?p=1";

}

$str = "<div class=pg style=padding-top:25px;><a href=$_SESSION[$id]&".$id."=0>First</a> ";
if($page)$str .= "<a href=$_SESSION[$id]&".$id."=".($page-1).">Previous</a> ";
if($page-3>=0)$str .="<a href=$_SESSION[$id]&".$id."=".($page-3).">".($page-2)."</a> ";
if($page-2>=0)$str .="<a href=$_SESSION[$id]&".$id."=".($page-2).">".($page-1)."</a> ";
if($page-1>=0)$str .="<a href=$_SESSION[$id]&".$id."=".($page-1).">".$page."</a> ";
if($page < $maxpage)$str .=($page+1)." ";
if($page+1 < $maxpage)$str .="<a href=$_SESSION[$id]&".$id."=".($page+1).">".($page+2)."</a> ";
if($page+2 < $maxpage)$str .="<a href=$_SESSION[$id]&".$id."=".($page+2).">".($page+3)."</a> ";
if($page+3 < $maxpage)$str .="<a href=$_SESSION[$id]&".$id."=".($page+3).">".($page+4)."</a> ";
if($page+1 < $maxpage)$str .="<a href=$_SESSION[$id]&".$id."=".($page+1).">Next</a> ";
if(!$maxpage)$maxpage=1;
$str .="<a href=$_SESSION[$id]&".$id."=".($maxpage-1).">Last</a> <a href=javascript:;> ".($page+1)."/".$maxpage."Total</a> </div>";
}
return array($results,$str);
}

/**
* 左連接多表查詢
* @param
* @return
**/
function leftjoin($left,$right,$on,$condition,$limit=1){
$left = explode('.',$left);
$right = explode('.',$right);
$left['0'] = "`".DB_PREFIX.$left['0']."`";
$right['0'] = "`".DB_PREFIX.$right['0']."`";
if($left['1'] || $right['1']){
$fields = '';
if(!empty($left['1'])){
$_field = explode(',',$left['1']);
foreach( $_field as $one){
$fields.=$left['0'].'.`'.$one."`,";
}
}
if(!empty($right['1'])){
$_field = explode(',',$right['1']);
foreach( $_field as $one){
$fields.=$right['0'].".`".$one."`,";
}
}
$fields = rtrim($fields,',');
}
else{
$fields = '*';
}
$on = str_replace('\2',$right[0],str_replace('\1',$left[0],$on));
$condition = str_replace('\2',$right[0],str_replace('\1',$left[0],$condition));
$sql = "SELECT {$fields} FROM {$left[0]} LEFT JOIN {$right[0]} ON ( {$on} ) WHERE ( {$condition} ) LIMIT {$limit} ";

$query = $this->query($sql);
$field_num = mysql_num_fields($query);
while($arr = mysql_fetch_array($query,MYSQL_NUM)){
$_arr = array();
for( $i=0 ; $i<$field_num ; $i++ ){
$table = str_replace(DB_PREFIX,'',mysql_field_table($query, $i));
$field = mysql_field_name($query, $i);
$_arr[$table.'.'.$field] = $arr[$i];
}
$array[]=$_arr;

}
$array=$limit==1?$arrat[0]:$array;
return $array;
}
/**
* 用于創(chuàng)建一個表結(jié)構(gòu)
* @param 表名,結(jié)構(gòu) array(字段,格式,注釋) 表注釋 索引array(字段,字段) 全文搜索(字段,字段)
* @return 打印
**/

function createTable($tablename,$data,$comment='',$key='',$fulltext=''){
$_key='';
$_type = '';
$_fulltext = '';
$tablename = DB_PREFIX.$tablename;
$sql = "CREATE TABLE IF NOT EXISTS `$tablename` (
`id` int(10) unsigned NOT NULL auto_increment COMMENT 'ID',
";
foreach( $data as $one){
switch($one[1]){
case '':
$_type = 'varchar(255)';
break;
case 'tinyint':
$_type = 'tinyint(1)';
break;
case 'time':
$_type = 'int(10)';
break;
default:

if(strpos($one[1],'.')!==false){
$_type = explode('.',$one[1]);
$_type = $_type[0].'('.$_type[1].')';
}
else{
$_type = $one[1];
}
break;
}
$sql.="`{$one[0]}` $_type NOT NULL COMMENT '{$one[2]}',
";
}

if(!empty($key)){
foreach( $key as $one){
$_key.="KEY `$one` (`$one`),
";
}
}
if(!empty($fulltext)){
foreach( $fulltext as $one){
$_key.="FULLTEXT `$one` (`$one`),
";
}
}

$sql.= $_key.$_fulltext."PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=".CHARSET." COMMENT '$comment';
";
if(!$_GET[sure]){

if(empty($_GET)){
$url = '?sure=1';

}
else{
$url = $_SERVER["REQUEST_URI"].'&sure=1';
}

echo "即將執(zhí)行以下建表操作:<br><pre>$sql<a href=$url>確定</a></pre>";
}
elseif($_GET[sure] && $this->query($sql)){

echo "完成操作";
}
else{
echo "操作失敗:<br>><pre>$sql</pre>";
}

exit;

}
};

//實例

define("DB_HOST", 'localhost');
define("DB_USER", 'root');
define("DB_PWD", '');
define("DB_NAME", "test");
define("DB_PREFIX", "test_");
define('CHARSET', 'gbk'); // 編碼
define("GEBUG", 1);

//建表
$Db=new Db();
$data[] = array('title','','標題');
$data[] = array('open','tinyint.1','是否公開');
$data[] = array('keyword','','關(guān)鍵詞');
$data[] = array('content','text','內(nèi)容');
$data[] = array('created','time','時間');
//$Db->createTable('article',$data,'文章表');
//增刪改查
$data['title']='t';
$data['keyword']='k';
$Db->insert('article',$data);
$num = $Db->read('article.id','1 order by id desc');
$data['created'] = mktime()+$num['id'];
$Db->update('article',$data,"`id` =2");
$Db->delete('article',"`id` =3");

?>

]]>
http://m.jartj.cn/blog/view-368.html/feed 3
mysql字符串替換函數(shù)replace http://m.jartj.cn/blog/view-230.html http://m.jartj.cn/blog/view-230.html#comments Sat, 27 Aug 2011 15:07:47 +0000 lin http://m.jartj.cn/blog/?p=230 mysql替換字符串函數(shù)replace可以實現(xiàn)把某字段的某些字符串替換成其他字符串,例如

update dede_addonarticle set body=replace(body,'news/uploads/allimg/c110826','news/uploads/blank.gif?')

可以把dedecms的文章內(nèi)容表所有的圖片鏈接替換成空白圖片,這樣就可以去把已經(jīng)上傳的大量圖片刪除以節(jié)省空間了,在對采集回來的數(shù)據(jù)尤其有用。

]]>
http://m.jartj.cn/blog/view-230.html/feed 323
phpmyadmin里MySQL字符集:cp1252 West European (latin1) ,解決亂碼問題 http://m.jartj.cn/blog/view-209.html http://m.jartj.cn/blog/view-209.html#comments Fri, 26 Aug 2011 06:54:49 +0000 lin http://m.jartj.cn/blog/?p=209 使用虛擬主機空間上的phpmyadmin操作數(shù)據(jù)庫的時候,如果看到phpmyadmin首頁上顯示的MySQL 字符集為cp1252 West European (latin1),當我們導入數(shù)據(jù)時就會出現(xiàn)亂碼,解決的方法是:

在phpmyadmin首頁的右邊有個Language選項,把默認的中文 - Chinese simplified-gb2312改成 中文 - Chinese simplified,則左邊的MySQL 字符集會變成UTF-8 Unicode (utf8) ,亂碼問題得到解決!

]]>
http://m.jartj.cn/blog/view-209.html/feed 296
phpmyadmin 默認數(shù)據(jù)庫引擎修改為myisam http://m.jartj.cn/blog/view-181.html http://m.jartj.cn/blog/view-181.html#comments Thu, 25 Aug 2011 04:24:42 +0000 lin http://m.jartj.cn/blog/?p=181
phpmyadmin 默認創(chuàng)建的數(shù)據(jù)庫默認的數(shù)據(jù)庫引擎為innodb,如果希望修改為靈活性更高的myisam
在my.ini找到default-storage-engine=innodb,修改為myisam
]]>
http://m.jartj.cn/blog/view-181.html/feed 356
Mysql查詢數(shù)據(jù)表中某字段重復出現(xiàn)的次數(shù),并按照次數(shù)排序 http://m.jartj.cn/blog/view-90.html http://m.jartj.cn/blog/view-90.html#comments Sat, 13 Aug 2011 18:29:55 +0000 lin http://m.jartj.cn/blog/?p=90

利用Mysql中的 的聚合函數(shù) count(*) 可以實現(xiàn)這個功能,例如需要查詢data表中name出現(xiàn)次數(shù)最多的記錄,可以先按照group by name分組,用count算出分組里的條數(shù),再按照count排序:

select name,count(*) from data group by name order by count(*) DESC limit 1

不加limit限制將返回按照name重復次數(shù)排列的數(shù)據(jù)

]]>
http://m.jartj.cn/blog/view-90.html/feed 419
Mysql Having的用法:對group by之后的分組加限制條件 http://m.jartj.cn/blog/view-88.html http://m.jartj.cn/blog/view-88.html#comments Sat, 13 Aug 2011 18:27:50 +0000 lin http://m.jartj.cn/blog/?p=88

在使用聚合函數(shù)之前,我們可以通過where對查詢加限制條件,那么如果在group by之后我們要對分組里面的數(shù)據(jù)再加限制條件怎么辦呢?答案是having。

HAVING子句可以讓我們篩選成組后的各組數(shù)據(jù).
WHERE子句在聚合前先篩選記錄.也就是說作用在GROUP BY 子句和HAVING子句前.
而 HAVING子句在聚合后對組記錄進行篩選。

having子句出現(xiàn)的數(shù)據(jù)必須在group by 之后,order by 之后

例如在上一篇中對name按照出現(xiàn)次數(shù)排序之后,我們還想只查出名字里面含有l(wèi)in的數(shù)據(jù),可以這樣寫:

select name ,count(*) from data group by name having name like '%lin%' order by couny(*) DESC

]]>
http://m.jartj.cn/blog/view-88.html/feed 683
Mysql 子查詢的用法 http://m.jartj.cn/blog/view-69.html http://m.jartj.cn/blog/view-69.html#comments Sat, 13 Aug 2011 17:00:34 +0000 lin http://m.jartj.cn/blog/?p=69 一,子選擇基本用法
1,子選擇的定義
子迭擇允許把一個查詢嵌套在另一個查詢當中。比如說:一個考試記分項目把考試事件分為考試(T)和測驗(Q)兩種情形。下面這個查詢就能只找出學生們的考試成績
select * from score where event_id in (select event_id from event where type='T');
2,子選擇的用法(3種)
? 用子選擇來生成一個參考值
在這種情況下,用內(nèi)層的查詢語句來檢索出一個數(shù)據(jù)值,然后把這個數(shù)據(jù)值用在外層查詢語句的比較操作中。比如說,如果要查詢表中學生們在某一天的測驗成績,就應該使用一個內(nèi)層查詢先找到這一天的測驗的事件號,然后在外層查詢語句中用這個事件號在成績表里面找到學生們的分數(shù)記錄。具體語句為:
select * from score where
id=(select event_id from event where date='2002-03-21' and type='Q');
需要注意的是:在應用這種內(nèi)層查詢的結(jié)果主要是用來進行比較操作的分法時,內(nèi)層查詢應該只有一個輸出結(jié)果才對??蠢?,如果想知道哪個美國總統(tǒng)的生日最小,構(gòu)造下列查詢
select * from president where birth=min(birth)
這個查詢是錯的!因為MySQL不允許在子句里面使用統(tǒng)計函數(shù)!min()函數(shù)應該有一個確定的參數(shù)才能工作!所以我們改用子選擇:
select * from president where birht=(select min(birth) from presidnet);
? exists 和 not exists 子選擇
上一種用法是把查間結(jié)果由內(nèi)層傳向外層、本類用法則相反,把外層查詢的結(jié)果傳遞給內(nèi)層。看外部查詢的結(jié)果是否滿足內(nèi)部查間的匹配徑件。這種"由外到內(nèi)"的子迭擇用法非常適合用來檢索某個數(shù)據(jù)表在另外一個數(shù)據(jù)表里面有設有匹配的記錄

數(shù)據(jù)表t1 數(shù)據(jù)表t2
I1 C1 I2 C2
1
2
3 A

C 2
3
4 C

A
先找兩個表內(nèi)都存在的數(shù)據(jù)
select i1 from t1 where exists(select * from t2 where t1.i1=t2.i2);
再找t1表內(nèi)存在,t2表內(nèi)不存在的數(shù)據(jù)
select i1 form t1 where not exists(select * from t2 where t1.i1=t2.i2);

需要注意:在這兩種形式的子選擇里,內(nèi)層查詢中的星號代表的是外層查詢的輸出結(jié)果。內(nèi)層查詢沒有必要列出有關(guān)數(shù)據(jù)列的名字,田為內(nèi)層查詢關(guān)心的是外層查詢的結(jié)果有多少行。希望大家能夠理解這一點
? in 和not in 子選擇
在這種子選擇里面,內(nèi)層查詢語句應該僅僅返回一個數(shù)據(jù)列,這個數(shù)據(jù)列里的值將由外層查詢語句中的比較操作來進行求值。還是以上題為例
先找兩個表內(nèi)都存在的數(shù)據(jù)
select i1 from t1 where i1 in (select i2 from t2);
再找t1表內(nèi)存在,t2表內(nèi)不存在的數(shù)據(jù)
select i1 form t1 where i1 not in (select i2 from t2);
好象這種語句更容易讓人理解,再來個例子
比如你想找到所有居住在A和B的學生。
select * from student where state in('A','B')
二, 把子選擇查詢改寫為關(guān)聯(lián)查詢的方法。
1,匹配型子選擇查詢的改寫
下例從score數(shù)據(jù)表里面把學生們在考試事件(T)中的成績(不包括測驗成績?。┎樵兂鰜怼?br /> Select * from score where event_id in (select event_id from event where type='T');
可見,內(nèi)層查詢找出所有的考試事件,外層查詢再利用這些考試事件搞到學生們的成績。
這個子查詢可以被改寫為一個簡單的關(guān)聯(lián)查詢:
Select score.* from score, event where score.event_id=event.event_id and event.event_id='T';
下例可以用來找出所有女學生的成績。
Select * from score where student_id in (select student_id form student where sex = 'f');
可以把它轉(zhuǎn)換成一個如下所示的關(guān)聯(lián)查詢:
Select * from score
Where student _id =student.student_id and student.sex ='f';
把匹配型子選擇查詢改寫為一個關(guān)聯(lián)查詢是有規(guī)律可循的。下面這種形式的子選擇查詢:
Select * from tablel
Where column1 in (select column2a from table2 where column2b = value);
可以轉(zhuǎn)換為一個如下所示的關(guān)聯(lián)查詢:
Select tablel. * from tablel,table2
Where table.column1 = table2.column2a and table2.column2b = value;
(2)非匹配(即缺失)型子選擇查詢的改寫
子選擇查詢的另一種常見用途是查找在某個數(shù)據(jù)表里有、但在另一個數(shù)據(jù)表里卻沒有的東西。正如前面看到的那樣,這種"在某個數(shù)據(jù)表里有、在另一個數(shù)據(jù)表里沒有"的說法通常都暗示著可以用一個left join 來解決這個問題。請看下面這個子選擇查詢,它可以把沒有出現(xiàn)在absence數(shù)據(jù)表里的學生(也就是那些從未缺過勤的學生)給查出來:
Select * from student
Where student_id not in (select student_id from absence);
這個子選擇查詢可以改寫如下所示的left join 查詢:
Select student. *
From student left join absence on student.student_id =absence.student_id
Where absence.student_id is null;
把非匹配型子選擇查詢改寫為關(guān)聯(lián)查詢是有規(guī)律可循的。下面這種形式的子選擇查詢:
Select * from tablel
Where column1 not in (select column2 from table2);
可以轉(zhuǎn)換為一個如下所示的關(guān)聯(lián)查詢:
Select tablel . *
From tablel left join table2 on tablel.column1=table2.column2
Where table2.column2 is null;
注意:這種改寫要求數(shù)據(jù)列table2.column2聲明為not null。

]]>
http://m.jartj.cn/blog/view-69.html/feed 337
mysql數(shù)據(jù)庫的優(yōu)化 http://m.jartj.cn/blog/view-67.html http://m.jartj.cn/blog/view-67.html#comments Sat, 13 Aug 2011 16:58:34 +0000 lin http://m.jartj.cn/blog/?p=67

影響數(shù)據(jù)庫性能的根源:

1,磁盤I/O讀取

2,CPU使用率

3,資源競爭

優(yōu)化的方式:

1,設計優(yōu)化

2,操作優(yōu)化

3,使用其他優(yōu)化技術(shù)

1)設計優(yōu)化:

分類拆分數(shù)據(jù)量大的表;
選取最適用的字段屬性;
索引設計,為經(jīng)常查詢用到的字段建立索引,避免查詢時查找其他重復無用的數(shù)據(jù),避免了大范圍掃描;

2)操作優(yōu)化:

鎖表操作;
盡量避免子查詢,將子查詢轉(zhuǎn)化成連接查詢;
where子句查詢條件盡量少使用運算操作;
A>2與A>=3的效果有很大的區(qū)別了,因為A>2時數(shù)據(jù)庫會先找出為2的記錄索引再進行比較,而A>=3時ORACLE則直接找到=3的記錄索引;
a is not null 改為 a>0 或a>''等,判斷字段是否為空一般是不會應用索引的;
a<>0 改為 a>0 or a<0 ,不等于操作符是永遠不會用到索引的,因此對它的處理只會產(chǎn)生全表掃描; YY_BH LIKE '%5400%' 這個條件會產(chǎn)生全表掃描,如果改成YY_BH LIKE 'X5400%' OR YY_BH LIKE 'B5400%' 則會利用YY_BH的索引進行兩個范圍的查詢,性能肯定大大提高;
WHERE后面的條件順序影響 ,應該先把范圍小的條件放前面,在小范圍里面按接下來的條件查找;

3)其他優(yōu)化技術(shù)

使用數(shù)據(jù)緩存技術(shù),如memcached;
使用靜態(tài)存儲,對一些更新不頻繁但經(jīng)常調(diào)用的數(shù)據(jù)采用靜態(tài)文本的存儲方式;

]]>
http://m.jartj.cn/blog/view-67.html/feed 293
mysql操作符in between http://m.jartj.cn/blog/view-65.html http://m.jartj.cn/blog/view-65.html#comments Sat, 13 Aug 2011 16:57:30 +0000 lin http://m.jartj.cn/blog/?p=65

以下三條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)

經(jīng)過測試性能也是差不多,如果id是一個大數(shù)組那么最后一條書寫會簡單很多,可以利用php的

string implode ( string $glue , array $pieces )

函數(shù)把數(shù)組組合成(implode(',',$array))也就是(1,2,3)這樣的格式

]]>
http://m.jartj.cn/blog/view-65.html/feed 331
日韩一卡二卡在线播放-亚洲国产精品懂色av-青青热久免费精品视频在-久久精品中文字幕一区二区三区| 国产成人综合激情婷婷-亚洲国产综合在线观看不卡-色综网久久天天综合狼人-亚洲av高清在线不卡| 四虎永久精品免费在线-国产一级片内射在线播放-国产精品无套粉嫩白浆在线-色综合综合色综合色综合| 亚洲精品在线观看一区二区三区-亚洲高清在线自拍视频-日本一区二区三区午夜视频-日韩精品极品视频在线| 亚洲精品中文字幕播放-9l精品人妻中文字幕色-亚洲不卡一区二区在线看-97精品国产在线观看| 成年人午夜黄片视频资源-少妇高潮喷水在线观看-色网最新地址在线观看-人人爽人人澡人人人人妻那u还没| 蜜桃av在线国产精品-久久精品国产水野优香-亚洲午夜激情免费在线-97精品国产97久久久久久久免费| 日本一区二区三区在线视频-国产午夜性生活免费视频-亚洲老熟妇av熟妇在线-久久热这里只有精品国产| 人妻中文字幕一区二区三区-国产精品丝袜久久亚洲不卡-久久伊人精品色婷婷国产-日韩中精品文字幕在线一区| 97资源视频在线观看-青草视频在线免费播放-最新日韩中文字幕在线播放-成人国产av精品麻豆网站| 第一亚洲自拍偷拍一区二区-国产精品成人一区二区不卡-中文字幕一区二区三区精品人妻-一区二区三区中文字幕在线播放| 日韩有码中文在线视频-少妇我被躁爽到高潮在线观看-精品丰满人妻一区二区三区-亚洲天堂高清在线播放| 国产在线精品一区二区中文-亚洲小说欧美另类激情-97碰久日韩视频在线观看-日本一道本高清不卡区| 主播高颜值极品尤物极品-精品少妇人妻av免费看-精品国产免费一区二区久久-成人国产av精品入口在线| 九九热视频这里免费看-一二三区无线乱码中文在线-粉嫩美女无套内射视频免费播放-国产麻豆一精品一男同| 亚洲另类午夜中文字幕-日本av手机在线观看-性生交大片免费看看过的-天堂av免费在线观看| 国产精品久久三级精品-国产一级一片内射免费播放-一区二区三区国产精品麻豆-国产精品情侣自拍av| 国产精品亚洲精品日韩精品-狠狠爱婷婷网五月天久久-国产精品激情成色在人-国产农村妇女精品三级一区二区| 日韩亚洲分类视频在线-熟妇人妻久久中文字幕电-久久麻传媒亚洲av国产-精品丰满熟妇高潮一区| 九九热久久这里有精品视频-2020亚洲欧美日韩在线-国产精品久久无遮挡影片-亚洲国产高清在线不卡| 对天堂网在线观看av-一本色道久久亚洲狠狠躁-少妇被粗大的猛进视频-日韩熟女一区二区精品视频| 中文字幕国产剧情av-久久精品日韩欧美精品-玖玖热视频这里只有精品-国产黄色三级视频网站| 高清一区二区三区不卡视频-中午字幕乱码亚洲无线码-亚洲一区二区三区在线视频观看-最新一二三国产精品网址| 亚洲丁香婷婷久久一区二区-少妇高潮乱语对白自拍-99偷拍在线视频精品-天堂精品中文字幕在线| 久久中文字幕亚洲天堂-午夜国产成人福利视频-亚欧天堂成人av成人-熟女乱中文字幕熟女熟妇| 日韩精品视频网在线播放-亚洲综合网一区二区三区偷拍-岛国av在线播放观看-欧美日韩国产另类综合| 女优av天堂中文字幕-国产亚洲精品成人av久-国产黄三级三级三级三级一区二区-日本高清视频不卡一区二区| 最近中文字幕国产精品-国产一级片黄片免费观看-日本一区二区三区日韩欧美-亚洲一区电影网站在线观看| 亚欧曰中文字幕av一区二区三区-最新国产情侣在线视频-黄片大全视频免费在线观看-久久超级碰碰碰一区二区三区| 免费在线观看午夜视频-成人性生交大片免费网站-国产一区二区精品久久胖女人-亚州综合国产精品天码av| 正在播放会所女技师口爆-久热久热精品在线视频-久久久精品蜜桃久久九-亚洲精品无吗无卡在线播放| 青青青视频蜜桃一区二区-粗大挺进人妻中文字幕-国产小视频在线看不卡-国产精品一区免费在线观看| 在线观看91精品国产性-国产中文字幕精品免费-免费日韩毛片在线观看-精品人妻暴躁一区二区三区| 99一区二区三区精品人妻-国产污视频网站在线观看-伊人激情av一区二区三区-天堂av大片免费观看| 国产成人午夜精品久久-91久久精品一区二区喷水喷白浆-中文字幕日本人妻99-美女人妻少妇一区二区三区| 草草草草伦理少妇高清-国内精品视频网站草草-国产精品精国产在线观看-国产麻豆激情av在线| 九九久久精品国产婷婷-亚洲少妇视频在线观看-国产网友精品自拍视频-超碰在线成人免费精品| 国产亚洲成人精品久久久-亚洲免费av高清在线观看-在线观看国内自拍视频-亚洲国产成人精品综合色| 男女公园上摸下揉视频-日本精品视频一二区-激情久久综合久久人妻-伊人成人综合在线视频| 亚洲国产国语对白在线视频-中文字幕中文字字幕码一区二区-毛片av在线免费观看-免费在线观看av毛片| 国内自拍视频在线观看h-亚洲美女性生活一级片-香蕉久久夜色精品国产成人-亚洲国产成人久久综合人|