-4

正如标题所述,MySQL 中布尔值的 TINYINT (0, 1) 返回 true 和 false 值,但是当我从数据库中检索 TINYINT (0, 1) 值时,我想要 yes 和 no 值。是否可以??

4

5 回答 5

5

使用如果:

SELECT IF(bool_value, 'yes', 'no') as string_value...
于 2013-11-11T11:02:34.153 回答
2

tinyint 不返回真或假。它返回 0 或 1。如果您想要是和否,您需要自己指定:

if($return == 0) {
    return "no";
} else {
    return "yes";
}
于 2013-11-11T10:58:01.557 回答
1

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

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

正如Max建议的那样,另一个添加IF选项。

于 2013-11-11T10:59:18.987 回答
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;
}
于 2013-11-11T16:06:01.740 回答
0

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

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

于 2013-11-13T14:45:18.647 回答