2011-07-07 36 views
1

我試圖以稍微複雜的方式排列我的結果。我創建了一個名爲「優先級」的虛擬域,以便按順序排列結果。這裏是我的代碼:CakePHP MySQL虛擬字段問題

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

問題是((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)', 
); 
+0

謝謝,這是固定它。任何想法爲什麼((Venue.image_count> 0)* 500)自己返回0或500,但? – Will