手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2024年11月的文章

国庆

啥也不多了。灌水。。。
为同样和我一样在加班的朋友们祝福。
注意,保重身体

PHP的小技巧

好象,大多时候,我们对于字符串的比较都是采用了 strtolower或者strtoupper之后,再判断是否相等。只是这样就需要转换两次。大多时候,我们是针对字符集转换的时候才会这样,比如判断参数传进来是否utf-8,这5个字符的写法,可就多了,比如UTF-8,Utf-8,utf-8等,那我们怎么办呢?strtolower?strupper?不需要啦。。
strncasecmp($a,$b,$length)就可以了。。
如果返回是0则相等,那我们怎么判断呢?
strncasecmp($str,'utf-8',5) == 0那么,传入的参数就是utf8的,是否很方便呢?
只是这些函数我们平时不太用得到,我看到这个函数的用法却是在 yii framework,他在处理事件的时候,判断前两个字符是否为 on 的时候,就是这样判断的。我也因此学到了一招。

Mysql笔记

现在,懒得排版了。

遇到这个问题,从A表往B表导数据,初始SQL是这样的:

SQL代码
  1. REPLACE INTO shopnc_member_extend (member_id,sell_product_count)  
  2.     SELECT ug.uid,count(uid)  
  3.     FROM uchome_goods ug   
  4.     GROUP BY ug.uid   

由于member_id不是主键,于是传说中的Replace删除数据的情况就出现了(replace在更新不是主键的时候,但某数据是唯一索引时,其实它是删除该数据,再insert,这时候如果你只是更新一两个字段,那么其余的字段就会变成默认值)。所以,该方法被我否决。但因为我只要更新一个字段,所以我想着用update,开始的时候,怎么也想不出,后来卫斯文和我说,用insert ignore into吧。于是把replace into 换成了 insert ignore into进行测试,结果是0 rows affected。

怎么办,问了一下锅巴哥哥,他说:用ON DUPLICATE KEY UPDATE吧,于是到mysql官方上找了一下资料,google搜索mysq on duplicate,第一条就是官方手册,我这里就不贴链接了,但我事实上没有看太懂。。这时候卫斯文也说用ON DUPLICATE KEY UPDATE。然后给了一个例子:

SQL代码
  1. INSERT INTO music_top_filtration   (`sid`, `type`, `count_num`)   
  2.     SELECT sid,TYPE,count_num  
  3.     FROM music_top_version_day20100623 AS a  
  4.     LIMIT 1  
  5.     ON DUPLICATE KEY UPDATE music_top_filtration.count_num = music_top_filtration.count_num + VALUES(count_num)  

虽然功能能不太一样,但已经有点差不多了,他对此sql的解释是:sid+type 为唯一索引,如果唯一索引重复则更新count_num字段。也就是说,我上面的例子其实是可以用这个insert into来实现的,因为member_id虽然不是主键,但它是唯一索引。

然后我就尝试着写update,写出了这样的语句:

SQL代码
  1. UPDATE shopnc_member_extend as sme , uchome_goods as ug SET sme.sell_product_count = (select count(*) from uchome_goods as uug where uug.uid=sme.member_id)  
  2. WHERE sme.member_id=ug.uid;  

执行下来,没问题,只是这个花费的时间啊,超多。。。正在思考的过程中,ThinkinLamp群中的newone又给了个例子,那就是用临时表,当时他写的SQL是这样的:

SQL代码
  1. update user set roleno=(select count(*) from user_has_roles where user_has_roles.member_id=user.member_id)  
和我的SQL差不太多,然后他优化了一下,就成了这句(采用了临时表):
SQL代码
  1. update user a, (select count(*) as no,member_id from user_has_roles group by member_id) b set a.roleno=b.no where (a.member_id=b.member_id)  
于是,参考newone写的sql,我最终的sql就成了:
SQL代码
  1. UPDATE shopnc_member_extend as sme ,( SELECT seller_id, count( * ) as cnt FROM `shopnc_product_sold` GROUP BY seller_id HAVING seller_id IS NOT NULL ) as tmp  
  2.     SET sme.sale_score = tmp.cnt   
  3.     WHERE sme.member_id = tmp.seller_id ;  
执行了一下,速度刷刷的。只有0.x秒,oh yeah 。

其间,锅巴哥哥威胁我,要我参加他的mysql高级培训班,在此先鄙视一下。

迪斯尼动画片

最近美团在卖迪斯尼动画片了,为我们家的小朋友买了一套。本来以为这个玩意上海没有的,于是在北京活动推出的时候,我请朋友从北京帮我买了三套,其余两套送给老家的兄弟了。

结果,今天在美团突然发现,原来上海也有的卖了,郁闷啊。。

http://www.meituan.com/r/i318604

不过,活动时间不长,只有(从现在开始算 2010-09-28 上午11时)

剩余时间

  • 9
  • 12小时
  • 44分钟
所以,想买的尽快啊。。我主要是看中了这个

本次团购的是由天艺在线提供的正版迪士尼经典大全(黄金典藏版)一套!原价180元,美团价仅售49元,折扣低至2.7折哦!

  • 16张DVD光碟,含18部迪士尼经典电影+347集迪士尼经典卡通
  • 国/英/粤三种配音,中/英字幕;
  • 正版产品,商家已向美团提供了详细的出版社销售委托书证明;
  • 包装盒采用磨砂烫金工艺制作,珍藏馈赠佳品;
  • 本套光盘所有节目均由原版母带数字化翻录并修复而成。珍藏的是记忆,请不要用当代的高清动画的标准去要求50年前的经典哦~
如果小朋友不看,自己回忆一下也好,这让我想起了我在几年前在 卓越上 29块购买的 《猫和老鼠》

SQL,大量的SQL

这两天在折腾数据,写了很多很多SQL(当然是对我来说,比如象锅巴那种牛人,他们一写就是几百上千行的,我不能比),我只写了100多行。基本上所有的操作都通过SQL完成了,除非实在没办法完成的。才用PHP处理。

对我来说,这两天 insert into xxx (xxx) select xxx from xxx where xxx,写的很多了

还有update a,b set a.xx=b.xx where a.id=b.id之类的也很多

在锅巴哥哥的介绍下,还知道把一句SQL分成多句,或者用下面这张图解决。。。

大小: 65.24 K
尺寸: 360 x 376
浏览: 1903 次
点击打开新窗口浏览全图

嗯,本来想用存储过程的,但赶时间,来不及学了。几年前看的东西全忘光了。靠,晚上回去翻开我的mysql书看一下下先。

 

Tags: mysql, sql