TINYINT(0,1)表示MySQL中的布尔值

时间:2013-11-11 10:55:26

标签: php sql cakephp

如标题所示,MySQL中布尔值的TINYINT(0,1)返回true和false值,但是当我从数据库中检索TINYINT(0,1)值时,我想要是和没有值。可能吗??

5 个答案:

答案 0 :(得分:5)

使用IF:

SELECT IF(bool_value, 'yes', 'no') as string_value...

答案 1 :(得分:2)

tinyint不会返回true或false。它返回0或1.如果你想要是和否,你需要自己指定:

if($return == 0) {
    return "no";
} else {
    return "yes";
}

答案 2 :(得分:1)

是的,有可能。一种方法是向其添加CASE

SELECT
    CASE
        WHEN value = true THEN 'yes'
        ELSE 'no'
    END
FROM
    `table`;

另一个,Max建议,添加IF选项。

答案 3 :(得分:0)

使用AppModel::afterFind

http://book.cakephp.org/2.0/en/models/callback-methods.html#afterfind

public function afterFind($results, $primary = false) {
  foreach ($results as $index => $row) {
    if (isset($row[$this->alias]['yes_or_no'])) {
      $results[$index][$this->alias]['yes_or_no'] = $row[$this->alias]['yes_or_no'] ? 'yes' : 'no';
    }
  }  
  return $results;
}

答案 4 :(得分:0)

想要“是”和“否”听起来像是用于显示目的,以及如何选择格式化数据库/模型中的数据以供显示应该在面向视图的代码中,而不是数据库模式或查询逻辑,后者有有效的例外。除了诸如“名字”和“姓氏”作为单独项目是否有用而不是单个“名称”字段之类的考虑之外,关于数据库结构的决定应基于您需要存储的内容以及不同数据项与彼此,而不是一旦检索数据将如何看起来。特别是当你使用框架时,这应该是直截了当的。

也就是说,您可以使用枚举类型,将枚举定义为枚举('no','yes'),尽管Cake可能仍然不支持枚举。然后,您可以获取并设置字符串值或数字值(1和2,或减1以获得0和1)。总体而言,值为0和1的tinyint可能更好,因为它是传统的,现在或将来不太可能导致错误/错误。