按计算/聚合列对DataList进行排序

时间:2014-11-14 08:19:17

标签: php sorting silverstripe datalist

是否可以通过计算/虚拟/聚合col?

对Datalist / ComponentSet进行排序

我有一个包含具有StartDate和EndDate的事件的DataList。 现在我想按事件的持续时间(最短到最长)对列表进行排序。

在SQL中我会这样做:

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

如何使用silverstripe ORM

进行此操作
$list = Event::get()->sort('????');

包含新的Field Duration并在onAfterWrite-hooks中填写此字段的附加列不是首选。

这可能吗?

罗伯特

3 个答案:

答案 0 :(得分:6)

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

DataList::sort没有进行任何转义,因此任何有效的ORDER BY子句都可以正常工作。

答案 1 :(得分:2)

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

你可以在选择中计算这个差异以显示它和顺序,我使用' AS DiffDate'简化

答案 2 :(得分:1)

您可以像这样使用它:

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