项目中要用到一个判断,根据字段值来显示相对应的值。以前一直都是把数据从数据取出后在循环一下赋值,这么做很麻烦。今天突然想起来可以直接用SQL语句解决。

数据库表结构

  1. -- -------------------------------------------------------- 
  2.  
  3. -- 
  4. -- 表的结构 `babyinfo` 
  5. -- 
  6.  
  7. CREATE TABLE IF NOT EXISTS `babyinfo` ( 
  8.   `id` int(11) NOT NULL AUTO_INCREMENT, 
  9.   `uid` int(11) NOT NULL
  10.   `type` tinyint(1) NOT NULL COMMENT '1已出生,2孕期,3准备,4其它'
  11.   `babyname` varchar(30) NOT NULL
  12.   `years` int(4) NOT NULL
  13.   `monthint(2) NOT NULL
  14.   `dayint(2) NOT NULL
  15.   `birthday` int(10) NOT NULL
  16.   `sex` tinyint(1) NOT NULL COMMENT '0=未知,1=男,2=女'
  17.   `duedate` int(10) NOT NULL COMMENT '预产期,当type=2时为有效值'
  18.   PRIMARY KEY (`id`) 
  19. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ; 
  20.  
  21. -- 
  22. -- 转存表中的数据 `babyinfo` 
  23. -- 
  24.  
  25. INSERT INTO `douya_babyinfo` (`id`, `uid`, `type`, `babyname`, `years`, `month`, `day`, `birthday`, `sex`, `duedate`) VALUES 
  26. (1, 15, 1, '宝宝1', 2011, 7, 1, 2011, 1, 0), 
  27. (2, 15, 2, '宝宝2', 0, 0, 0, 0, 0, 1309536000), 
  28. (3, 16, 1, 'ddd', 2011, 7, 20, 2011, 1, 0), 
  29. (4, 10, 1, '广告', 2011, 8, 1, 2011, 1, 0), 
  30. (5, 11,
  31.  1, 'sdfsdf', 2011, 8, 2, 2011, 1, 0); 

需要根据字段sex值来显示,是男还是女或是未知。

SQL语句:

  1. SELECT IF(sex=1,"男","女") AS sex FROM `babyinfo`

显示结果:

sex

问题出现了,IF只能显示2判断结果。如果为0的话也会显示为女。

还有一个函数可以解决这个问题,SQL语句:

  1. SELECT CASE sex WHEN 1 THEN "男" WHEN 2 THEN "女" ELSE "未知" END AS sex FROM `babyinfo`  

显示结果:

sex
未知
未知
未知

这样就解决问题了!CASE可以写多个判断语句