按日期范围过滤MySQL

时间:2016-12-02 21:43:18

标签: php mysql database silverstripe

我需要修改此对象以仅返回过去100天的条目,但我们没有每天的条目,因此我们需要更复杂的东西来过滤掉额外的日期。

当前对象:

$obj = YearToDate::get()->sort('ID', 'DESC')->limit(100);

是否可以按对象定义中的创建日期进行过滤?或者我需要创建一个函数来处理过滤?

这是班级:

class YearToDate extends DataObject {

// Create DB fields
private static $db = array(
    'Inches' => 'Text'
);

// Assign Weather to Weather
private static $belongs_many_many = array(
    'Weather' => 'Weather'
);

// Summary fields to show in gridfield
private static $summary_fields = array(
    'Created' => 'Date',
    'Inches' => 'Inches'
);

public function getCMSFields() {
    $fields = parent::getCMSFields();

    // Remove Fields
    $fields->removeByName('Weather');

    // Add DB fields to CMS tabs
    $fields->addFieldToTab('Root.Main', new TextField('Inches','Inches'));

    return $fields;
}

// Required Fields
function getCMSValidator() {
    return new RequiredFields(array('Inches'));
}

}

1 个答案:

答案 0 :(得分:2)

如果您使用MySQL作为基础RDBMS,则可以使用MySQL date functions查询过去100天的条目。

这样的事情应该有效:

$list = YearToDate::get()
    ->sort('Created', 'DESC')
    ->where('"Created" >= DATE_SUB(NOW(), INTERVAL 100 DAY)')

这样做是从当前时间(NOW())删除100天并将其与Created日期进行比较。如果Created更大,那么它不到100天。

这将严格过滤过去100天,因此如果您每天没有参赛作品或每天多次参赛,您可能会得到少于或超过100个结果。