欢迎大家光临我的个人官方网站。在dlf5.net工作室没上线之前,我把dlf5.net域名跳转到dlf5.com个人博客。

发表于 winds | 5 条评论

Yii在Nginx下的rewrite配置

1. Nginx配置
在nginx.conf的server {段添加类似如下代码:
Nginx.conf代码:
location / {
if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}
}

2. 在Yii的protected/conf/main.php去掉如下的注释
Php代码:
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'/'=>'/view',
'//'=>'/',
'/'=>'/',
),
),

发表在 YiiFramework, 精彩转载 | 标签为 , , , | 留下评论

10位邀请百度网盘名额

  1. http://pan.baidu.com/netdisk/beinvited?invite_code=f9245654ac991f0da22b7ed1c06de37c
  2. http://pan.baidu.com/netdisk/beinvited?invite_code=9a062542e6afc3333012868a337d072f
  3. http://pan.baidu.com/netdisk/beinvited?invite_code=d60c2c73d7f272a237dfd22b1aa25670
  4. http://pan.baidu.com/netdisk/beinvited?invite_code=0769b72dbae3cd53319b7c0d1a47928a
  5. http://pan.baidu.com/netdisk/beinvited?invite_code=16e31ed241e87fae5d6843c111d28a50
  6. http://pan.baidu.com/netdisk/beinvited?invite_code=3390df53790896ba81ec672f78fe2486
  7. http://pan.baidu.com/netdisk/beinvited?invite_code=7f4abea559a115ca32d8f3f7c6367cbd
  8. http://pan.baidu.com/netdisk/beinvited?invite_code=ce698b77402436b38db3b51ca881948e
  9. http://pan.baidu.com/netdisk/beinvited?invite_code=3390df53790896ba81ec672f78fe2486
  10. http://pan.baidu.com/netdisk/beinvited?invite_code=c29049193568efc2542d020896a631cb
成功邀请好友,双方都可以获得300M的空间奖励,每个人仅有10位邀请名额,最多可获得3G的奖励空间
发表在 生活杂谈 | 标签为 , | 留下评论

[转]php session丢失

抛开cookie使用session

PHP中SESSION不能跨页传递问题的解决办法

在PHP中使用过SESSION的朋友可能会碰到这么一个问题,SESSION变量不能跨页传递。这令我苦恼了好些日子,最终通过查资料思考并解决了这个问题。我认为,出现这个问题的原因有以下几点:

1、客户端禁用了cookie

2、浏览器出现问题,暂时无法存取cookie

3、php.ini中的session.use_trans_sid = 0或者编译时没有打开–enable-trans-sid选项

为什么会这样呢?下面我解释一下:

Session储存于服务器端(默认以文件方式存储session),根据客户端提供的session id来得到用户的文件,取得变量的值,session id可以使用客户端的Cookie或者Http1.1协议的Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,然后服务器读取Session的目录……。也就是说,session id是取得存储在服务上的session变量的身份证。当代码session_start();运行的时候,就在服务器上产生了一个session文件,随之也产生了与之唯一对应的一个session id,定义session变量以一定形式存储在刚才产生的session文件中。通过session id,可以取出定义的变量。跨页后,为了使用session,你必须又执行session_start();将又会产生一个session文件,与之对应产生相应的session id,用这个session id是取不出前面提到的第一个session文件中的变量的,因为这个session id不是打开它的“钥匙”。如果在session_start();之前加代码session_id($session id);将不产生新的session文件,直接读取与这个id对应的session文件。

PHP中的session在默认情况下是使用客户端的Cookie来保存session id的,所以当客户端的cookie出现问题的时候就会影响session了。必须注意的是:session不一定必须依赖cookie,这也是session相比cookie的高明之处。当客户端的Cookie被禁用或出现问题时,PHP会自动把session id附着在URL中,这样再通过session id就能跨页使用session变量了。但这种附着也是有一定条件的,即“php.ini中的session.use_trans_sid = 1或者编译时打开打开了–enable-trans-sid选项”。

明白了以上的道理,现在我们来抛开cookie使用session,主要途径有三条:

1、设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了–enable-trans-sid选项,让PHP自动跨页传递session id。

2、手动通过URL传值、隐藏表单传递session id。

3、用文件、数据库等形式保存session_id,在跨页过程中手动调用。

通过例子来说明吧:

 

 

s1.php

<?php

session_start();

$_SESSION['var1']=”中华人民共和国”;

$url=”<a href=”.”\”s2.php\”>下一页</a>”;

echo $url;

?>

s2.php

<?php

session_start();

echo ”传递的session变量var1的值为:”.$_SESSION['var1'];

?>


运行以上代码,在客户端cookie正常的情况下,应该可以在得到结果“中华人民共和国”。

现在你手动关闭客户端的cookie,再运行,可能得不到结果了吧。如果得不到结果,再“设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了–enable-trans-sid选项”,又得到结果“中华人民共和国”

这也就是上面所说的途径1。

下面再说途径2:

修改的代码如下:

 

 

s1.php

<?php

session_start();

$_SESSION['var1']=”中华人民共和国”;

$sn = session_id();

$url=”<a href=”.”\”s2.php?s=”.$sn.”\”>下一页</a>”;

echo $url;

?>

s2.php

<?php

session_id($_GET['s']);

session_start();

echo ”传递的session变量var1的值为:”.$_SESSION['var1'];

?>


办法3还是通过例子来说明:

login.html

 

 

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>

<html>

<head>

<title>Login</title>

<meta http-equiv=”Content-Type” content=”text/html; charset=??????”>

</head>

<body>

请登录:

<form name=”login” method=”post” action=”mylogin1.php”>

用户名:<input type=”text” name=”name”><br>

口 令:<input type=”password” name=”pass”><br>

<input type=”submit” value=”登录”>

</form>

</body>

</html>

mylogin1.php

<?php

$name=$_POST['name'];

$pass=$_POST['pass'];

if(!$name || !$pass) {

echo ”用户名或密码为空,请<a href=\”login.html\”>重新登录</a>”;

die();

}

if (!($name==”laogong” && $pass==”123″)) {

echo ”用户名或密码不正确,请<a href=\”login.html\”>重新登录</a>”;

die();

}

//注册用户

ob_start();

session_start();

$_SESSION['user']= $name;

$psid=session_id();

$fp=fopen(“e:\\tmp\\phpsid.txt”,”w+”);

fwrite($fp,$psid);

fclose($fp);

//身份验证成功,进行相关操作

echo “已登录<br>”;

echo “<a href=\”mylogin2.php\”>下一页</a>”;

?>


mylogin2.php

 

 

<?php

$fp=fopen(“e:\\tmp\\phpsid.txt”,”r”);

$sid=fread($fp,1024);

fclose($fp);

session_id($sid);

session_start();

if(isset($_SESSION['user']) && $_SESSION['user']=”laogong” ) {

echo ”已登录!”;

}

else {

//成功登录进行相关操作

echo “未登录,无权访问”;

echo “请<a href=\”login.html\”>登录</a>后浏览”;

die();

}

?>


同样请关闭cookie测试,用户名:laogong 密码:123 这是通过文件保存session id的,文件是:e:\tmp\phpsid.txt,请根据自己的系统决定文件名或路径。

至于用数据库的方法,我就不举例子了,与文件的方法类似。

总结一下,上面的方法有一个共同点,就是在前一页取得session id,然后想办法传到下一页,在下一页的session_start();代码之前加代码session_id(传过来的session id);

原文:http://hi.baidu.com/%D0%A1code/blog/item/3d36130b0f034ca32fddd47a.html

林锋博客:http://www.dlf5.com/

发表在 精彩转载 | 标签为 , , | 留下评论

[转]Yii CDbCriteria 常用方法

这是Yii CDbCriteria的一些笔记和常用用法:
    PHP代码

   $criteria = new CDbCriteria;      
   $criteria->addCondition(“id=1″); //查询条件,即where id = 1  
   $criteria->addInCondition(‘id’, array(1,2,3,4,5)); //代表where id IN (1,23,,4,5,);  
   $criteria->addNotInCondition(‘id’, array(1,2,3,4,5));//与上面正好相法,是NOT IN  
   $criteria->addCondition(‘id=1′,’OR’);//这是OR条件,多个条件的时候,该条件是OR而非AND  
   $criteria->addSearchCondition(‘name’, ‘分类’);//搜索条件,其实代表了。。where name like ‘%分类%’  
   $criteria->addBetweenCondition(‘id’, 1, 4);//between 1 and 4   
     
   $criteria->compare(‘id’, 1);    //这个方法比较特殊,他会根据你的参数自动处理成addCondition或者addInCondition,  
                                   //即如果第二个参数是数组就会调用addInCondition  
    
   $criteria->addCondition(“id = :id”);  
   $criteria->params[':id']=1;  
    
   $criteria->select = ‘id,parentid,name’; //代表了要查询的字段,默认select=’*';  
   $criteria->join = ‘xxx’; //连接表  
   $criteria->with = ‘xxx’; //调用relations   
   $criteria->limit = 10;    //取1条数据,如果小于0,则不作处理  
   $criteria->offset = 1;   //两条合并起来,则表示 limit 10 offset 1,或者代表了。limit 1,10  
   $criteria->order = ‘xxx DESC,XXX ASC’ ;//排序条件  
   $criteria->group = ‘group 条件’;  
   $criteria->having = ‘having 条件 ‘;  
   $criteria->distinct = FALSE; //是否唯一查询  

原文:http://blog.sina.com.cn/s/blog_4291fcdb0100tg3r.html

发表在 精彩转载 | 标签为 , , | 留下评论

mysql查询上周、月、季度、年和本周、月、季度、年

查询本周记录
select * from ht_invoice_information where WEEKOFYEAR(create_date)=WEEKOFYEAR(NOW());
#查询上周记录
select * from ht_invoice_information where create_date>=date_add(now(),interval -(8 + weekday(now())) day)
and create_date< =date_add(now(),interval -(1 + weekday(now())) day);

#或者
select * from `ht_invoice_information` where WEEKOFYEAR(create_date)=WEEKOFYEAR(DATE_SUB(now(),INTERVAL 1 week));
#查询本月数据
select * from ht_invoice_information where MONTH(create_date)=MONTH(NOW()) and year(create_date)=year(now());
#查询上月数据
select * from ht_invoice_information where create_date<=last_day(date_add(now(),interval -1 MONTH))
and create_date>=DATE_FORMAT(concat(extract(year_month from date_add(now(),interval -1 MONTH)),’01′),’%Y-%m-%d’);
#或者
select * from `ht_invoice_information` where MONTH(create_date)=MONTH(DATE_SUB(NOW(),interval 1 month))
and year(create_date)=year(now());
#查询本季度数据
select * from `ht_invoice_information` where QUARTER(create_date)=QUARTER(now());
#查询上季度数据
select * from `ht_invoice_information` where QUARTER(create_date)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));
#查询本年数据
select * from `ht_invoice_information` where YEAR(create_date)=YEAR(NOW());
#查询上年数据
select * from `ht_invoice_information` where year(create_date)=year(date_sub(now(),interval 1 year))

—————————————————————

$sql = “SELECT total_guest,total_user,active_guest,guest_new,active_user,login_user,visit_time FROM client_tool_detail WHERE visit_time > date_sub( now( ) , INTERVAL 32 DAY ) and app_id = $req_app_id “;

原文:http://wangqiaowqo.iteye.com/blog/1465970

发表在 精彩转载 | 标签为 | 留下评论

文章归档sql写法

最近写YII博客的存档日志portlet 或许会用到这个。记下来慢慢转化为YII的!

"select year(date),month(date),count(id) from Article Group by year(date),month(date) order by year(date) desc,month(date) desc"

发表在 生活杂谈 | 标签为 , | 留下评论

[转]全讲解PHP+MySQL的分页显示示例分析

Web开发是今后分布式程式开发的主流,通常的web开发都要涉及到与数据库打交道,客户端从服务器端读取通常都是以分页的形式来显示,一页一页的阅读起来既方便又美观。所以说写分页程序是web开发的一个重要组成部分,在这里,我们共同来研究分页程序的编写。

一、分页程序的原理

分页程序有两个非常重要的参数:每页显示几条记录($pagesize)和当前是第几页($page)。有了这两个参数就可以很方便的写出分页程序,我们以MySql数据库作为数据源,在MySQL里如果要想取出表内某段特定内容可以使用的T-SQL语句:select * from table limit offset,rows来实现。这里的offset是记录偏移量,它的计算方法是offset=$pagesize*($page-1),rows是要显示的记录条数,这里就是$page。也就是说select * from table limit 10,10这条语句的意思是取出表里从第11条记录开始的20条记录。

二、主要代码解析

 

$pagesize=10; //设置每一页显示的记录数
$conn=mysql_connect("localhost","root",""); //连接数据库
$rs=mysql_query("select count(*) from tb_product",$conn); //取得记录总数$rs
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];

//计算总页数

$pages=intval($numrows/$pagesize);

//判断页数设置

if (isset($_GET['page'])){
 $page=intval($_GET['page']);
}
else{
 $page=1; //否则,设置为第一页
}

 


三、创建用例用表myTable

 

create table myTable
(id int NOT NULL auto_increment,news_title varchar(50),
news_cont text,add_time datetime,PRIMARY KEY(id))

 

四、完整代码

 

<html>
<head>
<title>php分页示例</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<?php
 $conn=mysql_connect("localhost","root","");
 //设定每一页显示的记录数
 $pagesize=1;
 mysql_select_db("mydata",$conn);
 //取得记录总数$rs,计算总页数用
 $rs=mysql_query("select count(*) from tb_product",$conn);
 $myrow = mysql_fetch_array($rs);
 $numrows=$myrow[0];
 //计算总页数

 $pages=intval($numrows/$pagesize);
 if ($numrows%$pagesize)
$pages++;
 //设置页数
 if (isset($_GET['page'])){
$page=intval($_GET['page']);
 }
 else{
//设置为第一页
$page=1;
 }
 //计算记录偏移量
 $offset=$pagesize*($page - 1);
 //读取指定记录数
 $rs=mysql_query("select * from myTable
 order by id desc limit $offset,$pagesize",$conn);
 if ($myrow = mysql_fetch_array($rs))
 {
$i=0;
?>
<table border="0" width="80%">
<tr>
 <td width="50%" bgcolor="#E0E0E0">
<p align="center">标题</td>
<td width="50%" bgcolor="#E0E0E0">
<p align="center">发布时间</td>
</tr>
<?php
 do {
$i++;
?>
<tr>
 <td width="50%"><?=$myrow["news_title"]?></td>
 <td width="50%"><?=$myrow["news_cont"]?></td>
</tr>
 <?php
 }
 while ($myrow = mysql_fetch_array($rs));
echo "</table>";
}
echo "<div align='center'>共有".$pages."页(".$page."/".$pages.")";
for ($i=1;$i< $page;$i++)
 echo "<a href='fenye.php?page=".$i."'>[".$i ."]</a> ";
 echo "[".$page."]";
 for ($i=$page+1;$i<=$pages;$i++)
echo "<a href='fenye.php?page=".$i."'>[".$i ."]</a> ";
echo "</div>";
 ?>
</body>
</html>

 

五、总结

 

本例代码在windows2000 server+php4.4.0+mysql5.0.16上运行正常。该示例显示的分页格式是[1][2][3]…这样形式。假如想显示成“首页 上一页 下一页 尾页”这样形式,请加入以下代码:

 

 

$first=1;
$prev=$page-1;
$next=$page+1;
$last=$pages;

if ($page > 1)
{
 echo "<a href='fenye.php?page=".$first."'>首页</a> ";
 echo "<a href='fenye.php?page=".$prev."'>上一页</a> ";
}

if ($page < $pages)
{
 echo "<a href='fenye.php?page=".$next."'>下一页</a>
 echo "<a href='fenye.php?page=".$last."'>尾页</a> ";
}

 

其实,写分页显示代码是很简单的,只要掌握了它的工作原理。原文:http://linux.chinaitlab.com/PHP/722000.html

林锋博客 http://www.dlf5.com

 

 

发表在 精彩转载 | 标签为 , | 留下评论

Mysql基本命令

创建数据库
create databse 数据库名称;

显示MySQL中的数据库
show databases;

进入数据库
use 数据库名称;

显示数据库中的表
show tables;

显示表结构
desc 表名称;

批量执行sql脚本
\. d:\test.sql

备份数据库,可以到命令行下,执行如下命令
mysqldump –u root –p drp>d:\drp.sql

恢复数据
source d:\drp.sql

注意乱码问题,my.ini文件

第一招、mysql服务的启动和停止

net stop mysql

net start mysql

第二招、登陆mysql

语法如下: mysql -u用户名 -p用户密码

键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,然后回车即可进入到mysql中了,mysql的提示符是:

mysql>

注意,如果是连接到另外的机器上,则需要加入一个参数-h机器IP

第三招、增加新用户

格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by “密码”

如,增加一个用户user1密码为password1,让其可以在本机上登录, 并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入mysql,然后键入以下命令:

grant select,insert,update,delete on *.* to user1@localhost Identified by “password1″;

如果希望该用户能够在任何机器上登陆mysql,则将localhost改为”%”。

如果你不想user1有密码,可以再打一个命令将密码去掉。

grant select,insert,update,delete on mydb.* to user1@localhost identified by “”;

第四招: 操作数据库

登录到mysql中,然后在mysql的提示符下运行下列命令,每个命令以分号结束。

1、 显示数据库列表。

show databases;

缺省有两个数据库:mysql和test。 mysql库存放着mysql的系统和用户权限信息,我们改密码和新增用户,实际上就是对这个库进行操作。

2、 显示库中的数据表:

use mysql;

show tables;

3、 显示数据表的结构:

describe 表名;

4、 建库与删库:

create database 库名;

drop database 库名;

5、 建表:

use 库名;

create table 表名(字段列表);

drop table 表名;

6、 清空表中记录:

delete from 表名;

7、 显示表中的记录:

select * from 表名;

第五招、导出和导入数据

1. 导出数据:

mysqldump –opt test > mysql.test

即将数据库test数据库导出到mysql.test文件,后者是一个文本文件

如:mysqldump -u root -p123456 –databases dbname > mysql.dbname

就是把数据库dbname导出到文件mysql.dbname中。

2. 导入数据:

mysqlimport -u root -p123456 < mysql.dbname。

不用解释了吧。

3. 将文本数据导入数据库:

文本数据的字段数据之间用tab键隔开。

use test;

load data local infile "文件名" into table 表名;

1:使用SHOW语句找出在服务器上当前存在什么数据库:

mysql> SHOW DATABASES;

2:2、创建一个数据库MYSQLDATA

mysql> CREATE DATABASE MYSQLDATA;

3:选择你所创建的数据库

mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!)

4:查看现在的数据库中存在什么表

mysql> SHOW TABLES;

5:创建一个数据库表

mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));

6:显示表的结构:

mysql> DESCRIBE MYTABLE;

7:往表中加入记录

mysql> insert into MYTABLE values (“hyq”,”M”);

8:用文本方式将数据装入数据库表中(例如D:/mysql.txt)

mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE MYTABLE;

9:导入.sql文件命令(例如D:/mysql.sql)

mysql>use database;

mysql>source d:/mysql.sql;

10:删除表

mysql>drop TABLE MYTABLE;

11:清空表

mysql>delete from MYTABLE;

12:更新表中数据

mysql>update MYTABLE set sex=”f” where name=’hyq’;

posted on 2006-01-10 16:21 happytian 阅读(6) 评论(0) 编辑 收藏 收藏至365Key

13:备份数据库

mysqldump -u root 库名>xxx.data

14:例2:连接到远程主机上的MYSQL

假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:

mysql -h110.110.110.110 -uroot -pabcd123

(注:u与root可以不用加空格,其它也一样)

3、退出MYSQL命令: exit (回车)

本人在百度文库下载的,来源不清!

发表在 精彩转载 | 标签为 | 留下评论

最全的mysql 查询语句

最近用到mysql找了一些记下来!
转载:http://taoistwar.iteye.com/blog/376065

最全的mysql 查询语句(审精)
– 基本查询
select * from pet

– 列出指定的列
select name, owner form pet

– 直接进行算术运算,对字段起别名
select sin(1+2) as sin

–where 条件
select * from pet where (birth>'1980' and species='dog') or species='bird'

– 对null 的条件
select * from pet where sex is not null

– 所有名字第四位是n 的宠物信息是
select * from pet where owner like '___n%'

– 所有主人名叫gwen 或benny 的宠物
select * from pet where owner in ('gwen' , 'benny')

– 查询出生日期在90 年代是宠物,相当与 >= and < =
select * from pet where birth between ’1990′ and ’1999′

– 按主人姓名排序,相同的按宠物姓名倒序排列
select * from pet order by owner, name desc

– 查询性别为公的宠物,按生日倒序排列
select * from pet where sex='m' order by birth desc

–char_lenngth() 返回的字符的长度,length() 返回字节长度
SELECT owner,length(owner),char_length(owner) FROM pet p;

– 列出养有宠物狗的人名
select distinct owner from pet where species='dog'

– 用两种方法查询出所有狗和猫的名字、出生年份、出生月份
select name, left(birth,4) as year, mid(birth, 6, 2) as month from pet
where species='dog' or species='cat'

select name, year(birth) as year, month(birth) as month from pet
where species in('dog','cat')

– 查询所有名字中存在字母’e’ 的人,将他们养的宠物按类别、年龄排序
select name, species, birth
from pet
where owner like '%e%'
order by species,birth desc

– 数字函数
select round(2.345,2), truncate(2.345,2), mod(323,5)

– 日期函数
select now(), curdate(), curtime()

select adddate('2007-02-02', interval 31 day)

– 求出所有宠物的年龄

select name,birth,
truncate(datediff(now(),birth)/365,0) as age1,
year(now())-year(birth) - (dayofyear(birth)>dayofyear(now())) as age2
from pet

– 分组函数

select min(birth),max(birth),avg(birth),count(*),count(sex),
sum(birth)
from pet

– 每种宠物各有几只

select species,count(*)
from pet
group by species

– 查询年龄最大的宠物的信息

select * from pet where birth =
(select max(birth) from pet)

– 每年各出生了几只宠物

select year(birth), count(*) from pet group by year(birth)

– 鸟和猫的性别比例

select species, sex, count(*)
from pet
where species in ('cat','bird')
group by species, sex

– 各种宠物年龄的和

select species, sum(truncate(datediff(now(),birth)/365,0)) as SumAge
from pet
group by species

– 数量大于1 的宠物种类

select species, count(*) as c
from pet
group by species
having c>=2

– 基本双表关联

select a.name,a.species, a.sex,b.date, b.type, b.remark
from pet a,event b
where a.name = b.name

– 查询宠物产仔时的年龄

select a.name, a.species,
truncate(datediff(b.date,a.birth)/365,0) as age
from pet a,event b
where a.name = b.name and b.type='litter'

–90 年代出生的狗的事件列表

select a.name,birth,species,sex,date,type,remark
from pet a,event b
where a.name=b.name and birth between '1990' and '1999'
and species='dog'

– 活着的宠物按发生的事件类型分组,看各种事件发生的次数

select type, count(*)
from pet a, event b
where a.name=b.name and a.death is null
group by type

– 记录的事件数量超过1 条的宠物信息

select a.name,species,sex,count(*)
from pet a, event b
where a.name = b.name
group by b.name
having count(*)>=2

– 列出发生了两件事情的宠物的事件记录信息

select a.name,type,date,remark,b.species,b.sex,b.owner
from event a, pet b
where a.name=b.name and
b.name in
(
select name
from event
group by name
having count(*)=2
)

– 插入语句

insert into pet (name,species,birth)
values ('KKK','snake','2007-01-01');

insert into pet
values ('KK','Diane','cat','f',null,null);

insert into pet set name='k',owner='Benny'

– 更新语句

update pet set species='snake',sex='f',birth=now()
where name='k'

– 将事件表中生日的日期,更新到pet 表中相应宠物的birth 字段

update pet a
set birth = (
select date
from event b
where a.name=b.name and b.type='birthday'
)
where a.name in (
select name
from event
where type='birthday'
)


– 删除语句

delete from pet where name like 'k%'

发表在 精彩转载 | 标签为 | 一条评论

Mysql实现split函数

DELIMITER $$
CREATE FUNCTION `func_get_split_string_total`(
f_string varchar(1000),f_delimiter varchar(5)
) RETURNS int(11)
BEGIN
return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')));
END$$
DELIMITER ;

DELIMITER $$
CREATE FUNCTION `func_get_split_string`(
f_string varchar(1000),f_delimiter varchar(5),f_order int) RETURNS varchar(255) CHARSET utf8
BEGIN
declare result varchar(255) default '';
set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1));
return result;
END$$
DELIMITER ;

需要设置下参数:
SET GLOBAL log_bin_trust_function_creators = 1;

测试下:
CREATE TABLE "t" (
-> "t1" varchar(100) DEFAULT NULL,
-> "t2" int(11) DEFAULT NULL
-> ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

mysql> insert into t(t1,t2) values('a,b,c,d',1);
Query OK, 1 row affected (0.00 sec)

mysql> insert into t(t1,t2) values('a b c d',2);
Query OK, 1 row affected (0.00 sec)

mysql> select * from t;
+---------+------+
| t1 | t2 |
+---------+------+
| a,b,c,d | 1 |
| a b c d | 2 |
+---------+------+
2 rows in set (0.00 sec)

首先用func_get_split_string_total函数得到符合匹配的数量

mysql> select func_get_split_string_total(t1,',') from t where t2=1;
+-------------------------------------+
| func_get_split_string_total(t1,',') |
+-------------------------------------+
| 4 |
+-------------------------------------+
1 row in set (0.00 sec)

然后用func_get_split_string得出你想要的字符串

mysql> select func_get_split_string(t1,',',1) from t where t2=1;
+---------------------------------+
| func_get_split_string(t1,',',1) |
+---------------------------------+
| a |
+---------------------------------+
1 row in set (0.00 sec)

mysql> select func_get_split_string(t1,',',2) from t where t2=1;
+---------------------------------+
| func_get_split_string(t1,',',2) |
+---------------------------------+
| b |
+---------------------------------+
1 row in set (0.00 sec)

mysql> select func_get_split_string(t1,',',3) from t where t2=1;
+---------------------------------+
| func_get_split_string(t1,',',3) |
+---------------------------------+
| c |
+---------------------------------+
1 row in set (0.00 sec)

mysql> select func_get_split_string(t1,',',4) from t where t2=1;
+---------------------------------+
| func_get_split_string(t1,',',4) |
+---------------------------------+
| d |
+---------------------------------+
1 row in set (0.00 sec)

转载:http://blog.csdn.net/guzicheng/article/details/5874867

发表在 工作笔记, 精彩转载 | 标签为 , , | 留下评论