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