mysql - CakePHP MySQL虚拟字段问题

标签 mysql cakephp cakephp-1.3

我正在尝试以稍微复杂的方式对我的结果进行排序。我创建了一个名为“优先级”的虚拟字段来对结果进行排序。这是我的代码:

    public $virtualFields = array(
    'priority'=>'(Venue.featured * 5000) + (Venue.views * 2) + ((Venue.image_count > 0) * 500)',
);

现在这总是只返回 ((Venue.image_count > 0) * 500) 的值,即 500 或 0。如果我删除字段的那部分,留下:

public $virtualFields = array(
    'priority'=>'(Venue.featured * 5000) + (Venue.views * 2)',
);

给出了预期的结果。我还想在该字段中添加另一个组件,它具有相同的效果。代码:

public $virtualFields = array(
    'priority'=>'(Venue.featured * 5000) + (Venue.views * 2) + ((CHAR_LENGTH(Venue.blurb) > 0) * 500)',
);

在这种情况下,该字段再次只有 500 或 0,而不是所有字段的完整值。

我不明白这是怎么回事!如果我创建一个测量 image_count 或 CHAR_LENGTH(Venue.blurb) 的虚拟字段,它工作正常,但将其中任何一个添加到字段的其他部分都会使其失败。

最佳答案

问题在于 ((Venue.image_count > 0) * 500)((CHAR_LENGTH(Venue.blurb) > 0) * 500) 的语法> 不正确。

你应该使用 IF声明:

IF(Venue.image_count > 0, 500, 0)
IF(CHAR_LENGTH(Venue.blurb) > 0, 500, 0);

例如:

public $virtualFields = array(
  'priority' => '(Venue.featured * 5000) + (Venue.views * 2) + IF(Venue.image_count > 0, 500, 0)',
);

关于mysql - CakePHP MySQL虚拟字段问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6613424/

相关文章:

php - 如何在 cakephp join 中查找国家/地区名称及其相应的 ID

php - 使用 CakePHPs find 返回匹配条件数组的所有记录

CakePHP - $this->数据在 Model::save 之前消失

php - CakePHP - Html->link - 为什么使用 controller=> 和 action=> 而不仅仅是 controller/action

ios - 从 IOS 应用程序同时多次查询数据库导致崩溃

MySQL JOIN 表返回 NULL 或 0

mysql - mysqld 会陷入循环吗?

mysql - 过滤MYSQL数据库中的聚合值

php - 我如何路由到 app/webroot 文件夹? (蛋糕PHP)

php - 我可以将 Facebook 的 hiphop 与 Zend Framework、cakephp、symfony 等框架一起使用吗