兼容IE,FF浏览器,世界各地区域的JS时间计算

<table height=”25″ cellspacing=”0″ cellpadding=”0″ border=”0″>
<tbody>
<tr valign=”top”>
<td valign=”center”>北京时间[<span id="beijing">10:24:10</span>]</td>
<td valign=”center”>伦敦时间[<span id="london">02:24:10</span>]</td>
<td valign=”center”>纽约时间[<span id="newyork">21:24:10</span>]</td>
<td valign=”center”>芝加哥时间[<span id="chicago">20:24:10</span>]</td>
<td valign=”center”>东京时间[<span id="tokyo">11:24:10</span>]</td>
</tr>
</tbody>
</table>
//<![CDATA[
function time_rota()
{
var now;
var h,m,s;
now = new Date();
h=now.getHours();
m=now.getMinutes();
s=now.getSeconds();
h=((h < 10) ? "0" : "") + h;
m=((m < 10) ? "0" : "") + m;
s=((s < 10) ? "0" : "") + s;
document.getElementById('beijing').innerHTML = h + ":" + m + ":" + s;
setTimeout("time_rota()", 1000);
}
time_rota();
function time_rota1()
{
var now;
var h,m,s;
now = new Date();
h=now.getUTCHours();
h -= -0;
if(h<0)
{h += 24;}
m=now.getUTCMinutes();
s=now.getUTCSeconds();
h=((h < 10) ? "0" : "") + h;
m=((m < 10) ? "0" : "") + m;
s=((s < 10) ? "0" : "") + s;
document.getElementById('london').innerHTML = h + ":" + m + ":" + s;
setTimeout("time_rota1()", 1000);
}
time_rota1();
function time_rota2()
{
var now;
var h,m,s;
now = new Date();
h=now.getHours();
h -= 13;
if(h<0)
{h += 24;}
m=now.getMinutes();
s=now.getSeconds();
h=((h < 10) ? "0" : "") + h;
m=((m < 10) ? "0" : "") + m;
s=((s < 10) ? "0" : "") + s;
document.getElementById('newyork').innerHTML = h + ":" + m + ":" + s;
setTimeout("time_rota2()", 1000);
}
time_rota2();
function time_rota3()
{
var now;
var h,m,s;
now = new Date();
h=now.getUTCHours();
h -= -9;
if(h<=0)
{h += 24;}
m=now.getUTCMinutes();
s=now.getUTCSeconds();
h=((h < 10) ? "0" : "") + h;
m=((m < 10) ? "0" : "") + m;
s=((s < 10) ? "0" : "") + s;
document.getElementById('tokyo').innerHTML = h + ":" + m + ":" + s;
setTimeout("time_rota3()", 1000);
}
time_rota3();
function time_rota4()
{
var now;
var h,m,s;
now = new Date();
h=now.getUTCHours();
h -= 6;
if(h<=0)
{h += 24;}
m=now.getUTCMinutes();
s=now.getUTCSeconds();
h=((h < 10) ? "0" : "") + h;
m=((m < 10) ? "0" : "") + m;
s=((s < 10) ? "0" : "") + s;
document.getElementById('chicago').innerHTML = h + ":" + m + ":" + s;
setTimeout("time_rota4()", 1000);
}
time_rota4();
//]]>

兼容ff的加入收藏和设为首页代码

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />
<title>设为首页–加入收藏</title>
<script type=”text/javascript”>
function setHomePage(obj){
var aUrls=document.URL.split(“/”);
var vDomainName=”http://”+aUrls[2]+”/”;
try{//IE
obj.style.behavior=”url(#default#homepage)”;
obj.setHomePage(vDomainName);
}catch(e){//other
if(window.netscape) {//ff
try {
netscape.security.PrivilegeManager.enablePrivilege(“UniversalXPConnect”);
}
catch (e) {
alert(“此操作被浏览器拒绝!请在浏览器地址栏输入“about:config”并回车然后将[signed.applets.codebase_principal_support]设置为’true’”);
}
var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
prefs.setCharPref(‘browser.startup.homepage’,vDomainName);
}
}
if(window.netscape)alert(“ff”);
}
function addFavorite(){
var aUrls=document.URL.split(“/”);
var vDomainName=”http://”+aUrls[2]+”/”;
var description=document.title;
try{//IE
window.external.AddFavorite(vDomainName,description);
}catch(e){//FF
window.sidebar.addPanel(description,vDomainName,”");
}
}

</script>
</head>
<body>
<input type=”button” value=”设为首页” onclick=”setHomePage(this);” />  <input type=”button” value=”加入收藏” onclick=”addFavorite();” />
</body>
</html>

一个产品展示列表不错的效果

http://demo.gavick.com/joomla15/apr2011/

宝瓶网PC桌面应用程序

一、参考网站
1、业务逻辑和色调参考宝瓶网(http://www.borpor.com
2、界面布局参考4399盒(http://box.4399.com
二、功能说明
1、机型选择、宝瓶推荐、新品上架、装机必备、下载排名、量身定做等功能参考宝瓶网,在客户端的展示就可以
2、打开客户端后,缺省显示是“宝瓶推荐”。这个允许在“设置”中进行修改,修改只能从“宝瓶推荐、新品上架、装机必备、下载排名、量身定做”中选择
3、手机宝典是一个导航页面,要求可以在服务器进行增删调整,也允许用户进行调整
4、当选择分类后,图标
要修改为“分类精品”  “该类升级”
5、设置功能
(1)设置下载的目录
(2)选择打开程序确实设置
(3)允许记录下本机型(缺省是保存)
6、统计功能
(1)分渠道统计(会请不同的渠道机型推广)
(2)统计下载安装总数
(3)按日、周、月统计活跃用户数(即要知道有多少用户活跃)
三、宝瓶网服务器环境
1、一台在万网机房托管的独享主机
2、linux+apache+mysql+php
3、网站用PHP语言书写
四、要求
1、PC客户端软件需要提供源码
2、要求软件包尽量小

23个超流行的jQuery相册插件

本文罗列了23款目前非常受欢迎的jQuery插件,可以轻松建立起唯美的图片切换特效的相册功能,并且其中的一些还支持视频和Flash。

这些jQuery插件包括演示、文档说明等,欣赏吧!

1. Galleriffic

jquery_gallery_01

下载与文档 查看演示

2. jPhotoGrid

jquery_gallery_02

下载与文档 查看演示

3. Galleria

jquery_gallery_03

下载与文档 查看演示

4. YoxView

jquery_gallery_04

下载与文档 查看演示

5. Micro Image Gallery

jquery_gallery_05

下载与文档 查看演示

6. AD Gallery

jquery_gallery_06

下载与文档 查看演示

7. slideViewerPro

jquery_gallery_07

下载与文档 查看演示

8. Galleryview

jquery_gallery_08

下载与文档 查看演示

9. Pikachoose Image Gallery

jquery_gallery_09

下载与文档 查看演示

10. Multimedia Gallery for Images, Video and Audio

jquery_gallery_10

下载与文档 查看演示

11. Spacegallery

jquery_gallery_11

下载与文档 查看演示

12. jQuery Cycle

jquery_gallery_12

下载与文档 查看演示

13. Pikachoose

jquery_gallery_13

下载与文档 查看演示

14. s3Slider

jquery_gallery_14

下载与文档Tutorial & Downloads → View the Demo 查看演示→

15. slideViewer

jquery_gallery_15

下载与文档 查看演示

16. jFlow

jquery_gallery_16

下载与文档 查看演示

17. CrossSlide

jquery_gallery_17

下载与文档 查看演示

18. Slides – A Slideshow Plugin for jQuery

jquery_gallery_18

下载与文档 查看演示

19. jTag – Plugin to Tag Pictures & More

jquery_gallery_19

下载与文档 查看演示

20. Galleria – JavaScript Image Gallery Framework

jquery_gallery_20

下载与文档 查看演示

21. A Horizontal Accordion Plugin for jQuery

jquery_gallery_21

下载与文档 查看演示

22. jShowOff – A jQuery Content Rotator

jquery_gallery_22

下载与文档 查看演示

23. Zoomy – E-Magnification

jquery_gallery_23

下载与文档 查看演示

CSS布局:让页底内容永远固定在底部

我们在设计一些页面内容甚少的网页时(典型应用就是登陆页面),由于显示器的分辨率大,在正常情况下,假如页面内容高度小于浏览器高度时,页面底部以下会留下很大的空间,如:http://www.helloweba.com/demo/cssfooter/demo1.html

不管浏览器的高度怎么变化,我们要想让页底内容始终固定在底部,最终效果如:http://www.helloweba.com/demo/cssfooter/demo2.html

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>无标题文档</title>
<style type=”text/css”>
* {margin:0;padding:0;}
html, body {height: 100%;}
#wrap {min-height: 100%;}
#main {overflow:auto;background:#f7f7f7;
padding-bottom: 60px;}  /* 必须使用和footer相同的高度 */
#footer {position: relative;
margin-top: -60px;
height: 60px;
clear:both;
background:#369}

/*Opera Fix*/
body:before {
content:”";
height:100%;
float:left;
width:0;
margin-top:-32767px;
}

</style>
<!–[if !IE 7]>
<style type=”text/css”>
#wrap {display:table;height:100%}
</style>
<![endif]–>
</head>

<body>
<div id=”wrap”>
<div id=”main”>
主体
</div>

</div>

<div id=”footer”>
这里是页底footer内容
</div>

</body>
</html>

mysql替换语句 部分替换

update tabel(表名) set Fields(字段名)=replace( Fields,’原内容’,'替换成的内容’)

UPDATE `cdb_pms`

SET `subject` = REPLACE(`subject`, ‘Welcome to’, ‘欢迎光临’)

WHERE INSTR(`subject`,’Welcome to’) > 0
替换cdb_posts表的message字段,将“viewthread.php?tid=3989”替换成“viewthread.php?tid=16546”

UPDATE `cdb_posts`

SET `message`= REPLACE(`message`, ‘viewthread.php?tid=3989′, ‘viewthread.php?tid=16546′)

WHERE INSTR(`message`,’viewthread.php?tid=3989′) > 0 ;

删除所有的空格

UPDATE `es_product`   SET `pro_pub_time` = TRIM(`pro_pub_time`)

lower或者upper

删除所有饱含’['或者']‘或者’.'的字符

UPDATE `es_product`   SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘[','')   WHERE INSTR(`pro_pub_time`,'[') > 0

UPDATE `es_product`   SET `pro_pub_time` = REPLACE(`pro_pub_time`, ']‘,”)   WHERE INSTR(`pro_pub_time`,’]') > 0

UPDATE `es_product`   SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘.’,'-’)   WHERE INSTR(`pro_pub_time`,’.') > 0

替换所有含中文’-'的为英文’-’

UPDATE `es_product`   SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘-’,'-’)   WHERE INSTR(`pro_pub_time`,’-’) > 0

将所有的年月都替换成’-’

UPDATE `es_product`   SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘年’,'-’)   WHERE INSTR(`pro_pub_time`,’年’) > 0

UPDATE `es_product`   SET `pro_pub_time` = REPLACE(`pro_pub_time`, ‘月’,'-’)   WHERE INSTR(`pro_pub_time`,’月’) > 0

将所有’2005-04-’这种类型的替换成’2005-04-01′

UPDATE `es_product`   SET `pro_pub_time` = CONCAT( `pro_pub_time`, ’01′)   WHERE SUBSTRING_INDEX( `pro_pub_time`, ‘-’, -1) = ” AND LENGTH(`pro_pub_time`) > 0 AND LENGTH(`pro_pub_time`) > 5

将所有’2005-’这种类型替换成’2005-01-01′

UPDATE `es_product`   SET `pro_pub_time` = CONCAT( `pro_pub_time`, ’01-01′) WHERE INSTR(`pro_pub_time`,’-') > 0 AND   LENGTH(`pro_pub_time`) = 5

将所有 饱含’-',但是位数小于8的改成追加’-01′

UPDATE `es_product`   SET `pro_pub_time` = CONCAT( `pro_pub_time`, ‘-01′) WHERE INSTR(`pro_pub_time`,’-') > 0 AND   LENGTH(`pro_pub_time`) < 8

将所有’2005′这样的改成’2005-01-01′

UPDATE `es_product`   SET `pro_pub_time` = CONCAT(`pro_pub_time`,’-01-01′) WHERE INSTR(`pro_pub_time`,’-') = 0 AND   LENGTH(`pro_pub_time`) = 4

最后将所有’2005-01-01′格式化成’2005年01月’

UPDATE `es_product`   SET `pro_pub_time` = DATE_FORMAT(`pro_pub_time`,’%Y年%m月’) WHERE INSTR(`pro_pub_time`,’-') > 0

批量替换 MySQL 指定字段中的字符串是数据库mysql替换语句 部分替换应用中很常见的需求,但是有很多初学者在遇到这种需求时,通常都是用脚本来实现;其实,MySQL 内置的有批量替换语法,效率也会高很多;想了解具体方法mysql替换语句 部分替换,继续阅读本文吧 :)

批量替换的具体语法是:

Code:

UPDATE 表名 SET

指定字段 = replace(指定字段, ’要替换的字符串’, ’想要的字符串’)

WHERE 条件;

如果你想把 article 表中 ID 小于5000的记录,content 字段中“解决”替换成“解放”,那么语法就是:

Code:

UPDATE article SET

content = replace(content, ’解决’, ’解放’)

WHERE ID<5000;

UPDATE `fengsh_shoplist`

SET `s_clickurl`= REPLACE(`s_clickurl`, ’15252835′, ’10190773′)

如何使用Sphinx来实现全文检索(搜索)功能

前年(2009)在参与开发CMSTOP系统时,就知道此CMS使用Sphinx实现进行全文检索功能。但那时候自己并没有这功能的开发。不过了解了Sphinx的全文搜索的强大功能。这次,在新的公司,也要做一个全文搜索功能。第一时间就想到了Sphinx来进行功能的实现。

当然在实际上,Sphinx对中文的分词功能并不好。可是很庆幸地是,Coreseek很好地帮我们解决了这一个问题。在这里很感谢此团队为开源事业做出的贡献。Sphinx能得到很多人的认同与用使用,很大一部分功劳和这团队关系。关于此团队更多信息可查看Coreseek首页。

下面我就基本地简介一下如何使用Sphinx来实现全文检索功能,当然大部分安装信息都是在Coreseek主站上直接copy下来,因为他们写的实在太详细了。让我没有任何可发挥的地方。

1.下载Sphinx 支持中文分词Coreseek  http://www.coreseek.cn/news/11/52/

2.进行安装:参考http://www.coreseek.cn/products-install/install_on_bsd_linux/
##下载coreseek:coreseek 3.2.14:点击下载、coreseek 4.0.1:点击下载

$ wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz
$ 或者 http://www.coreseek.cn/uploads/csft/4.0/coreseek-4.0.1-beta.tar.gz
$ tar xzvf coreseek-3.2.14.tar.gz 或者 coreseek-4.0.1-beta.tar.gz
$ cd coreseek-3.2.14 或者 coreseek-4.0.1-beta

##安装mmseg

$ cd mmseg-3.2.14
$ ./bootstrap    #提示中如无error可以不用理会
$ ./configure --prefix=/usr/local/mmseg3
$ make && make install
$ cd ..

##安装coreseek,需提前安装mysql依赖库及操作系统基础开发库以支持mysql数据源和xml数据源

$ cd csft-3.2.14 或者 cd csft-4.0.1
$ sh buildconf.sh    #提示中如无error可以不用理会
$ ./configure --prefix=/usr/local/coreseek  --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/
--with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql    ##如果提示mysql问题,可以查看MySQL数据源安装说明
$ make && make install
$ cd ..

##测试mmseg分词,coreseek搜索(需要预先设置好字符集为zh_CN.UTF-8,确保正确显示中文)

$ cd testpack
$ cat var/test/test.xml    #此时应该正确显示中文
$ /usr/local/mmseg3/bin/mmseg -d /usr/local/mmseg3/etc var/test/test.xml
$ /usr/local/coreseek/bin/indexer -c etc/csft.conf --all

 

3.增加Sphinx增量索引

a.先建立一个计数表

CREATE TABLE sph_counter(
  		counter_id INTEGER PRIMARY KEY NOT NULL,
  		max_doc_id INTEGER NOT NULL
     );

b.修改sphinx.conf

#主要数据源
      source main
	{
    	type                    = mysql

    	sql_host                = localhost
    	sql_user                = oophp
    	sql_pass                = oophp.cn
    	sql_db                    = oophp
    	sql_port                = 3306
    	sql_query_pre            = SET NAMES utf8
    	sql_query_pre	    =REPLACE INTO sph_counter SELECT 1, MAX(id) FROM dede_archives
    	sql_query                = Select  *  From article where channel=3 AND id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
                                                              	#sql_query第一列id需为整数
                                                              	#title、content作为字符串/文本字段,被全文索引
    	#sql_attr_uint            =id           #从SQL读取到的值必须为整数
    	#sql_attr_timestamp        =pubdata_attr #从SQL读取到的值必须为整数,作为时间属性

    	sql_query_info_pre      = SET NAMES utf8                                        #命令行查询时,设置正确的字符集
    	sql_query_info = Select * From article WHERE channel=3  AND id=$id
	}

       #增量数据源
	source delta : main
	{
		sql_query_pre =SET NAMES utf8
        	sql_query = Select * From article  where  channel=3 AND \
	id>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
	}

	#主索引生成
	index main
	{
    	source            = main             #对应的source名称
    	path            = /usr/local/coreseek/data/main/ #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    	docinfo            = extern
    	mlock            = 0
    	morphology        = none
    	min_word_len        = 1
    	html_strip                = 0
    	ngram_len=0
    	#中文分词配置,详情请查看:http://www.coreseek.cn/products-install/coreseek_mmseg/
    	charset_dictpath = /usr/local/mmseg3/etc/   #BSD、Linux环境下设置,/符号结尾
    	#charset_dictpath = etc/                             #Windows环境下设置,/符号结尾,最好给出绝对路径,例如:C:/usr/local/coreseek/etc/...
    	charset_type        = zh_cn.utf-8
    	#charset_type        = utf-8
    	#charset_table        = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
    	#ngram_chars        = U+3000..U+2FA1F

	}

       #增量索引
	index delta : main
	{
    		source            = delta             #对应的source名称
    		path            = /usr/local/coreseek/data/delta/ #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
	}
	#全局index定义
	indexer
	{
    		mem_limit            = 128M
	}

	#searchd服务定义
	searchd
	{
    		listen                  =   9312
    		read_timeout        = 5
    		max_children        = 30
    		max_matches            = 1000
    		seamless_rotate        = 0
    		preopen_indexes        = 0
    		unlink_old            = 1
    		pid_file = /var/log/searchd.pid  #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    		log = /var/log/searchd_mysql.log        #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    		query_log = /var/log/query_mysql.log #请修改为实际使用的绝对路径,例如:/usr/local/coreseek/var/...
    		binlog_path =                                #关闭binlog日志
	}

 

c.启动sphinx服务,并生成主索引

#/usr/local/coreseek/bin/searchd
 # /usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf main --rotate

d.建立生成主索引和增量索引shell脚本

build_main_index.sh脚本:
		#!/bin/sh
		#/usr/local/coreseek/bin/searchd --stop
		/usr/local/coreseek/bin/indexer -c /usr/local/coreseek/etc/sphinx.conf main --rotate 

build_delta_index.sh脚本:
		#!/bin/sh
		#/usr/local/coreseek/bin/searchd --stop
		/usr/local/coreseek/bin/indexer  -c /usr/local/coreseek/etc/sphinx.conf  delta --rotate
		/usr/local/coreseek/bin/indexer  -c /usr/local/coreseek/etc/sphinx.conf --merge main delta --merge-dst-range deleted 0 0 --rotate
		#/usr/local/coreseek/bin/searchd

e.写入cron计划任务中,生成增量索引,并重新建立主索引

//每10分钟生成一次索引
*/10 * * * *  /bin/sh /usr/local/coreseek/build_delta_index.sh >/dev/null 2>&1  

//每天凌晨3点过5分,重新建立一次主索引
5 3 * * *  /bin/sh /usr/local/coreseek/build_main_index.sh > /dev/null 2>&1

参考网站:

http://sphinxsearch.com/

http://www.coreseek.cn/

http://www.sphinxsearch.org/archives/category/sphinx

http://blog.c1gstudio.com/archives/730

MYSQL查询多余重复的记录

(一)
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
select * from people
where peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1)

2、删除表中多余的重复记录,重复记录是根据单个字段(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)

3、查找表中多余的重复记录(多个字段)
select * from vitae a
where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq  having count(*) > 1)

4、删除表中多余的重复记录(多个字段),只留有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)

5、查找表中多余的重复记录(多个字段),不包含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

)

PHP中跳出多重循环使用break,continue,goto,return,exit的区别

今天在写一段PHP程序时,犯了一个小错误结果耽误了很长时间,后来发现原来是多重循环没有控制好的问题。后来整理了在PHP中跳出循环的各种用法,以及它们的区别,与大家分享。

PHP中的循环结构大致有for循环,while循环,do{} while 循环以及foreach循环几种,不管哪种循环中,在PHP中跳出循环大致有这么几种方式:

continue

continue 是用来用在循环结构中,控制程序放弃本次循环continue语句之后的代码并转而进行下一次循环。continue本身并不跳出循环结构,只是放弃这一次循环。如果在非循环结构中(例如if语句中,switch语句中)使用continue,程序将会出错。

例如在下面的这段PHP代码片段中:
<?php
for($i = 1;$i <= 100; $i++ ){
if($i % 3 == 0 || $i % 7 == 0){
continue;
}
& #160;  else{
echo”$i \n<br/>”;
}
}
?>

PHP的代码片段的作用是输出100以内,既不能被7整除又不能被3整除的那些自然数,循环中先用if条件语句判断那些能被整除的数,然后执行continue;语句,就直接进入了下个循环。不会执行下面的输出语句了。

break

break是被用在上面所提的各种循环和switch语句中的。他的作用是跳出当前的语法结构,执行下面的语句。break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环。

看下面这个多重循环嵌套的例子:
for($i = 1;$i <= 10; $i++ ){
for($j = 1;$j <= 10;$j++){
$m = $i * $i + $j * $j;
echo”$m \n<br/>”;
if($m < 90 || $m > 190) {
break 2;
}
}
}

这里使用了break 2跳出了两重循环,你可以试验一眼,将2去掉,得到的结果是完全不一样的。如果不使用参数,跳出的只是本次循环,第一层循环会继续执行下去。

goto

goto实 际上只是一个运算符,和其他语言一样,PHP中也不鼓励滥用goto,滥用goto会导致程序的可读性严重下降。goto的作用是将程序的执行从当前位置 跳转到其他任意位置,goto本身并没有要结束的循环的作用,但其跳转位置的作用使得其可以作为跳出循环使用。但PHP5.3及以上版本停止了对goto 的支持,所以应该尽量避免使用goto。
下面的是一个使用了goto跳出循环的例子
for($i = 1000;$i >= 1 ; $i– ){
if( sqrt($i) <= 29){
goto a;
}
echo “$i”;
}
a:
echo” this is the end”;

例子中使用了goto来跳出循环,这个例子用来检测1000以内,那些数的平方根大于29。

exit

exit是用来结束程序执行的。可以用在任何地方,本身没有跳出循环的含义。exit可以带一个参数,如果参数是字符串,PHP将会直接把字符串输出,如果参数是integer整形(范围是0-254),那个参数将会被作为结束状态使用。

<?php
for($i = 1000;$i >= 1 ; $i– ){
if( sqrt($i) >= 29){
echo”$i \n<br/>”;
}
else{
exit;
}
}
echo”本行将不会被输出”;
?>

上面这个例子中直接在从循环里结束了代码的运行,这样会导致后面的代码都不会被执行,如果是在一个php web 页面里面,甚至连exit后面的html代码都不会被输出。

return

return 语句是用来结束一段代码,并返回一个参数的。可以从一个函数里调用,也可以从一个include()或者require()语句包含的文件里来调用,也可 以是在主程序里调用,如果是在函数里调用程序将会马上结束运行并返回参数,如果是include()或者require()语句包含的文件中被调用,程序 执行将会马上返回到调用该文件的程序,而返回值将作为include()或者require()的返回值。而如果是在主程序中调用,那么主程序将会马上停 止执行

<?php
for($i = 1000;$i >= 1 ; $i– ){
if( sqrt($i) >= 29){
echo”$i \n<br/>”;
}
else{
return;
}
}
echo”本行将不会被输出”;
?>

这里的例子和上面使用exit的效果是一样的。

在循环结束条件,自然跳出

这个当然是最好理解了,当循环满足循环临界条件时就是自己退出。

以上是PHP中跳出循环的几种方式的简单总结。