2014-11-14 68 views
3

是否可以通過計算/虛擬/聚合col排序Datalist/ComponentSet?通過計算/虛擬/聚合col排序Dataalist/ComponentSet通過計算/虛擬/聚合col排序DataList?

我有一個DataList包含具有StartDate和EndDate的事件。 現在我想按事件的持續時間(從最短到最長)對列表進行排序。

在SQL我會做:

... ORDER BY DATEDIFF(EndDate, StartDate) ASC 

與silverstripe ORM

$list = Event::get()->sort('????'); 

含有新場期間和填充在onAfterWrite鉤該字段中的附加列是不優選的怎麼辦。

這可能嗎?

羅伯特

回答

6
$list = Event::get()->sort(array('DATEDIFF("EndDate", "StartDate")' => 'ASC')); 

DataList::sort不會做任何轉義,所以任何有效的ORDER BY子句都可以正常工作。

+0

謝謝...作品完美.... – derRobert

0

你可以使用這樣的:

SELECT *, DATEDIFF(EndDate, StartDate) as duration FROM table WHERE conditional = 1 ORDER BY duration ASC 
+0

因爲不是很清楚。排序應該由silverstripe ORM處理...不是經典的sql – derRobert

1
SELECT StartDate,EndDate,DATEDIFF(EndDate, StartDate) AS DiffDate FROM myTable ORDER BY DiffDate ASC 

U可以在選擇計算這個差異表明它和秩序,我使用 'AS DiffDate' 簡化

+0

sry因爲不是很清楚。排序應該由silverstripe ORM處理...不經典sql – derRobert