26

10-2012

php和mysql的一些奇怪之处

今总结一下php和mysql的一些奇怪之处,并且讲一下如何将数据库中的一个字段的值赋给另一个字段,如果原来你不知道,现在一看一定吓你一跳,竟然是如此的简单。php和mysql就像是一对一见钟情、相见恨晚的恋人。二者的确是很般配,这里总结了一些我们平时使用的时候一些不太注意而又奇怪的地方。以后再有还会补充!

每个人写代码的时候其实都有他的习惯,有的喜欢在程序中处理到最简化之后再放到mysql等数据库中查询,有的人可能喜欢比较简单省事的方式,交由数据库处理一部分。这里说明的一点就是数据库也是有处理函数和功能的,很多初学者包括我刚开始都以为数据库就只是增删改。但是,如果说到两种方式的优劣,对于php程序来说,个人比较崇尚的是前一种,即尽量的试数据库查询的语句更加的简单和高效。为什么呢,个人认为php程序的瓶颈在哪里,就是在数据库,因为php程序执行起来是非常非常的快的,这就是因为他并不编译,而是原样的“翻译”我们所写入的代码,当然这样的好处和缺点都是显而易见的,就是对程序的编写优化要求的更高,php不会为我们优化,我们只能通过自己的理解和经验,尽量的优化我们的代码。这也是为什么php程序不同的人写出来同一个功能却是因人而异,真正成为php程序的高手是比较难的。反过来说,因为php代码执行的非常之快,几乎都是瞬间的事,所以,影响其效率的就是数据库了,如何更加高效的在海量数据中操作,是每个php程序猿都要好好思考的事情,这就要求我们这些苦哈哈的php程序员不单单要精通php程序,还有对数据库,甚至js,css都有比较高的了解。因为php只有完美的和这些东西结合才会发挥出其更大的优势,很多功能这个实现起来比较困难和浪费的话,可以让其他的帮忙实现。这样相辅相成才会达到最大的效果。下面就看总结的几点:

1 一般情况下我们都存储时间的时候都是存时间戳,这样的好处是很明显的,可以很方便的取两个日期直接的时间段,但是其实我们存为0000-00-00的形式,mysql也是可以识别的,但是这里有一个比较奇怪的地方就是,用strtotime转化2012-9-1是可以转化的,但是sql语句中where time>=’2012-9-1′是不能识别的,必须是 where time>=’2012-09-01′这样的形式。所以很多时候我们如果不存储为时间戳形式时一定要注意了。很多js时间选择器都是2012-9-1这样的形式,要么找一个好的js时间选择器,要么将结果进行转化,要么就存储时间戳。

2 sql 语句中有和没有和”的区别,很多人在写sql语句的时候,比如说写一个select语句,他会写select * from biao where id = 1,这样写没有什么错误,但是却很不规范,当我们写的程序多了,或用户多了、数据多了,就开始追求效率了。首先sql语句最好其关键字都用大写,有人说oracle就是先把小写转化为大写再执行。并且大写比较容易区分变量。然后就是表名和字段要加上,这是为什么呢,因为加上,系统就知道它是关键字,比如我们写一个语句 UPDATE biao SET v1 = v2和UPDATE biao SET v1 = ‘v2′ 是很不同的,前一句就是将v2这个字段的值赋给v1,即使是int型的字段,其值也最好加上”。

3介绍几个好用的sql语句:
(1) SELECT id,CONCAT(path,’-',id) as abspath FROM 表名 ORDER BY abspath,这个concat比较特别,他的作用是组合多个字段,这个sql就是将path字段和id字段用-连接,作为一个新的虚拟字段 abspath,并且他的特点就是如果以abspath排序的话,他是按这个字段中每个字符的顺序排列,类似奥运奖牌榜。先比较第一位,大的就大,一样就比较第二位。这个在某些特别功能时是比较好用的。

(2)SELECT * FROM 表名 WHERE find_in_set(6,字段)>0 这个find_in_set适用于
类似文章的推荐、指定文章的调取,因为这个函数就是判断类似1,2,3,6,这样的值中是否有6这个字符。他会以,来作为临界。

(3)SELECT id FROM 表名 WHERE 字段名 REGEXP ‘值’,这个就和like相似了,就是判断字段中有没有这个值,只不过这个是用正则的方式,是比较高效的,众所周知like的效率是很低的。
GRANT ALL PRIVILEGES ON *.* TO root@’%’ identified by ‘密码’;
flush privileges;

(4) UPDATE table_name SET field_name = replace (field_name,’from_str’,'to_str’) WHERE …… 说明: table_name —— 表的名字 field_name —— 字段名 from_str —— 需要替换的字符串 to_str —— 替换成的字符串。这个sql语句可以替换某个字段中某个字符。是非常实用的。

本文链接:http://www.521php.com/archives/582/

程序本天成,妙手偶得之!我们只是代码的搬运工!

转载请注明:http://www.521php.com/archives/582/?replytocom=218

目前有3 条留言

  1. 2012年10月29日 下午 1:38 庆伟   |  引用  |  #1     

    小哥将来一定有大作为啊!

  2. 2012年10月29日 下午 5:50 dd   |  引用  |  #3     

    睽睽

发表评论

昵称:

网址:

eg.博客主题调用的是Gravatar头像,你可以通过邮箱注册获得头像.
/ 快捷键:Ctrl+Enter