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)