http://fthemes.com/
持續收集中...
2011年5月12日 星期四
2011年5月11日 星期三
在MySQL中找尋或刪除重複的記錄
查找表中多餘的重複記錄,重複記錄是根據單個字段(peopleId)來判斷
刪除表中多餘的重複記錄,重複記錄是根據單個字段(peopleId)來判斷,只留有rowid最小的記錄
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
查找表中多餘的重複記錄(多個字段)
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
刪除表中多餘的重複記錄(多個字段),只留有rowid最小的記錄
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
查找表中多餘的重複記錄(多個字段),不包含rowid最小的記錄
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
-------------
比方說
在A表中存在一個字段「name」,
而且不同記錄之間的「name」值有可能會相同,
現在就是需要查詢出在該表中的各記錄之間,「name」值存在重複的項;
Select Name,Count(*) From A Group By Name Having Count(*) > 1
如果還查性別也相同大則如下:
Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1
------------------------------------
方法一
declare @max integer,@id integer
declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0
方法二
有兩個意義上的重複記錄,一是完全重複的記錄,也即所有字段均重複的記錄,二是部分關鍵字段重複的記錄,比如Name字段重複,而其他字段不一定重複或都重複可以忽略。
1、對於第一種重複,比較容易解決,使用
select distinct * from tableName
就可以得到無重複記錄的結果集。
如果該表需要刪除重複的記錄(重複記錄保留1條),可以按以下方法刪除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
發生這種重複的原因是表設計不周產生的,增加唯一索引列即可解決。
2、這類重複問題通常要求保留重複記錄中的第一條記錄,操作方法如下
假設有重複的字段為Name,Address,要求得到這兩個字段唯一的結果集
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
最後一個select即得到了Name,Address不重複的結果集(但多了一個autoID字段,實際寫時可以寫在select子句中省去此列)
------------------------------------
查詢重複
select * from tablename where id in (
select id from tablename
group by id
having count(id) > 1
)
select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
刪除表中多餘的重複記錄,重複記錄是根據單個字段(peopleId)來判斷,只留有rowid最小的記錄
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
查找表中多餘的重複記錄(多個字段)
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
刪除表中多餘的重複記錄(多個字段),只留有rowid最小的記錄
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
查找表中多餘的重複記錄(多個字段),不包含rowid最小的記錄
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
-------------
比方說
在A表中存在一個字段「name」,
而且不同記錄之間的「name」值有可能會相同,
現在就是需要查詢出在該表中的各記錄之間,「name」值存在重複的項;
Select Name,Count(*) From A Group By Name Having Count(*) > 1
如果還查性別也相同大則如下:
Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1
------------------------------------
方法一
declare @max integer,@id integer
declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主字段 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0
方法二
有兩個意義上的重複記錄,一是完全重複的記錄,也即所有字段均重複的記錄,二是部分關鍵字段重複的記錄,比如Name字段重複,而其他字段不一定重複或都重複可以忽略。
1、對於第一種重複,比較容易解決,使用
select distinct * from tableName
就可以得到無重複記錄的結果集。
如果該表需要刪除重複的記錄(重複記錄保留1條),可以按以下方法刪除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
發生這種重複的原因是表設計不周產生的,增加唯一索引列即可解決。
2、這類重複問題通常要求保留重複記錄中的第一條記錄,操作方法如下
假設有重複的字段為Name,Address,要求得到這兩個字段唯一的結果集
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
最後一個select即得到了Name,Address不重複的結果集(但多了一個autoID字段,實際寫時可以寫在select子句中省去此列)
------------------------------------
查詢重複
select * from tablename where id in (
select id from tablename
group by id
having count(id) > 1
)
LightBox 收集
在製作網頁時常會使用的 LightBox 收集:
- ThickBox:http://jquery.com/demo/thickbox/
 除了圖片顯示,還有 html 及 iframe。不過已經不更新了。
- Fancybox:http://fancybox.net/
 最近常看到的。
- Colorbox:http://colorpowered.com/colorbox/
- jQuery UI Dialog:http://jqueryui.com/demos/dialog/
- Shadowbox.js:http://www.shadowbox-js.com/index.html
2011年5月10日 星期二
檢查 GD 並產生縮圖的函式
這是經常使用的GD縮圖函式
//檢查 GD
function checkGD(){
    $error = false;
    $gd = array();   
    if (!extension_loaded('gd')) {
        if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
            if (!dl('php_gd.dll')) {
                $error = true;
            }
        } else {
            if (!dl('gd.so')) {
                $error = true;
            }
        }
    }
    if ($error) {
        return false;
    } else {
        $gdInfo                   = gd_info();
        $gd['version']           = stristr($gdInfo['GD Version'], '2.') ? 2 : 1;
        $gd['formats']['gif'] = $gdInfo['GIF Read Support'];
        $gd['formats']['jpg'] = $gdInfo['JPEG Support']; //小心,不是 JPG Support
        $gd['formats']['png'] = $gdInfo['PNG Support'];       
        return $gd;
    }   
}
// 製作縮圖 createImage(來源檔名路徑, 格式, 縮圖檔名路徑, 縮圖寬, 縮圖高)
function createImage($file, $format, $fileDest, $outputX, $outputY){
    // Get information about the installed GD.
    $gdInfo    = checkGD();
    $gdVersion = $gdInfo['version'];   
    if ($gdInfo == false) {
        return false;
    }   
    // Ensure the given format is supported.
    if ($gdInfo['formats'][$format] != 1) {
        return false;
    }   
    // Get the image dimensions.
    $dimensions = @getimagesize($file);
    $width        = $dimensions[0];
    $height        = $dimensions[1];   
    // thumbs mode.   
    $quality  = 85;       
    $deltaX   = 0;
    $deltaY   = 0;
    $portionX = $width;
    $portionY = $height;
    // Get the source image in gif format.
    if ($format == 'gif') {
        $imageSrc  = @imagecreatefromgif($file);
    }   
    // Get the source image in jpg format.
    if ($format == 'jpg') {
        $imageSrc  = @imagecreatefromjpeg($file);
    }   
    // Get the source image in png format.
    if ($format == 'png') {
        $imageSrc  = @imagecreatefrompng($file);
    }
    // The thumbnail creation with GD1.x functions does the job.
    if ($gdVersion == 1) {       
        // Create an empty thumbnail image.
        $imageDest = @imagecreate($outputX, $outputY);       
        // Try to create the thumbnail from the source image.
        if (@imagecopyresized($imageDest, $imageSrc, 0, 0, $deltaX, $deltaY, $outputX, $outputY, $portionX, $portionY)) {           
            // save the thumbnail image into a file.
            @imagejpeg($imageDest, $fileDest, $quality);           
            // Delete both image resources.
            @imagedestroy($imageSrc);
            @imagedestroy($imageDest);           
            return true;           
        }       
    }   
    // The recommended approach is the usage of the GD2.x functions.
    if ($gdVersion == 2) {       
        // Create an empty thumbnail image.
        $imageDest = @imagecreatetruecolor($outputX, $outputY);       
        // Try to create the thumbnail from the source image.
        if (@imagecopyresampled($imageDest, $imageSrc, 0, 0, $deltaX, $deltaY, $outputX, $outputY, $portionX, $portionY)) {           
            // save the thumbnail image into a file.
            @imagejpeg($imageDest, $fileDest, $quality);
            // Delete both image resources.
            @imagedestroy($imageSrc);
            @imagedestroy($imageDest);           
            return true;           
        }       
    }
    return false;
}
測試 PHP 是否安裝 GD 並顯示相關訊息
想要測試當下 PHP 環境是否支援 GD,並顯示相關訊息。
<?php
    if(extension_loaded('gd')) {
        echo "你可以使用 GD <br />";
        foreach(gd_info() as $cate=>$value)
        echo "$cate:$value<br>";
    }else
    echo '你沒有安裝 GD 模組';
?>
訂閱:
意見 (Atom)
