CakePHP MySQL虚拟字段问题

时间:2011-07-07 15:52:19

标签: mysql cakephp cakephp-1.3

我正试图以稍微复杂的方式订购我的结果。我创建了一个名为'priority'的虚拟域来按顺序排序结果。这是我的代码:

    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)的虚拟字段,它可以正常工作,但是将其中任何一个添加到字段的其他部分会使其失败。

1 个答案:

答案 0 :(得分:1)

问题是((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)',
);