有时需要查询的结果分别在几个字段里面,需要将几个字段的内容组合起来
原来一直都是先把几个字段先查询出来,然后再在 PHP 脚本里面再用一个 foreach 将这些字段组合起来
后来想能不能直接在查询语句中把结果组合起来,用类似于
SELECT filed1 + field2 AS result FROM t
来直接输出结果,这样就不用再循环一次,提高效率
但是让人失望的是 MySQL 只支持数字的 + 运算,不支持字符串的 + 运算
后来查到用 CONCAT() 函数可以实现字符串的组合,那么上面的查询就可以写成
SELECT CONCAT(filed1, filed2) AS result FROM t
遇到从几个表的几个字段里查询内容,有时可能有的字段为空,那么要用其他的值来代替,这时就可以用 IFNULL() 了
用法:
IFNULL(expr1, expr2)
如果 expr1 的值不为空,返回 expr1 的值, 如果 expr1 的值为空时,返回 expr2 的值
那么可以写出下面的查询了
SELECT id, IFNULL(username, 'noName') AS userName FROM t
意思是如果 username 的值为 null ,查询出来的值就是 noName
但是 IFNULL() 不能处理值为 0 的情况,0 不是 NULL,如果用 IFNULL(0, 'zero') 那么得到的结果还是 0,而不是 zero,这时就得用 IF() 了
用法:
IF(expr1, expr2, expr3)
如果 expr1 的值为TRUE(expr1<>0且expr1<>NULL),那么返回 expr2 的值,否则返回 expr3 的值
那么上面的例子可以写成
SELECT IF(num, 'not zero', 'zero') AS Number FROM t
还有个条件分支的 CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END
这里就不多写了,参见参考链接
参考链接:
http://database.51cto.com/art/201010/229371.htm
http://hi.baidu.com/alskjstl/item/0bb12bd71f558b1420e2504f