2014-11-14 71 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