mysql - YII 框架中按用户、位置和日期范围分组

标签 mysql web-applications yii grouping date-range

有人可以帮助我了解如何使用日期范围 (create_date) 并按 user_id 和位置对数据进行分组吗?

我输入字段user_id、位置和日期范围,排序结果恰好发生在日期范围内。 我尝试了很多次修复 Controller ,但结果都是一样。

如果我只输入 user_id 字段并输入位置,而没有在 CGridView 上仅按 user_id 和位置排序的日期范围字段,则日期范围将保持随机顺序。

下面是模型、 Controller 和 View

型号 模型中的我的变量

 public $from_date;
 public $to_date;
      ....
 public function search()
        {
            $criteria=new CDbCriteria;


            $criteria->compare('user_id',$this->user_id);
            $criteria->compare('location',$this->location,true);
            $criteria->compare('satisfy_val',$this->satisfy_val,true);
            $criteria->compare('create_date',$this->create_date,true);
            /* $criteria->mergeWith($this->dateRangeSearchCriteria('create_date',$this->create_date
            )); */
            if(!empty($this->from_date) && empty($this->to_date)){
                $criteria->condition="create_date >= '$this->from_date'";
            }elseif(!empty($this->to_date) && empty($this->from_date)){
                $criteria->condition="create_date <= '$this->to_date'";
            }elseif(!empty($this->to_date) && !empty($this->from_date)){
                $criteria->condition="create_date >= '$this->from_date' and create_date<= '$this->to_date'";
            }

            return new CActiveDataProvider($this, array(
                'criteria'=>$criteria,
                'sort'=>array('defaultOrder'=>array('user_id DESC','create_date DESC')),
            ));
        }

这是我的 Controller

public function actionAdmin()
    {
        $model=new Satisfact('search');
        /* $model->unsetAttributes();  // clear any default values */
        if(isset($_GET['Satisfact'])){
            /* $model->attributes=$_GET['Satisfact']; */
            $model->user_id=$_GET['Satisfact']['user_id'];
            $model->lokasi=$_GET['Satisfact']['location'];          
            $model->from_date=$_GET['Satisfact']['from_date'];
            $model->to_date=$_GET['Satisfact']['to_date'];

        }
            $this->render('admin',array(
            'model'=>$model,
        ));


    }
...............

和我的观点

<div class="wide form">

<?php $form=$this->beginWidget('CActiveForm', array(
    'action'=>Yii::app()->createUrl($this->route),
    'method'=>'get',
)); ?>



    <div class="row">
        <?php //echo $form->label($model,'user_id'); ?>
        <?php //echo $form->textField($model,'user_id'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'user_id'); ?>
        <?php $_u = User::model()->findAll();
                  echo CHtml::activeDropDownList(
                        $model,'user_id',
                        CHtml::listData($_u,'id','username'),
                        array('prompt'=>'',) //empty is aliases FOR ALL user
                    );
               ?>
    </div>
    <div="row">
    <?php echo $form->labelEx($model,'location'); ?>
        <?php $lo_u = Location::model('Location')->findAll('id');
                  echo CHtml::activeDropDownList(
                        $model,'location',
                        CHtml::listData($lo_u,'location','location'),
                        array('prompt'=>'',)
                    );
               ?>
    </div>

    <div class="row">
        <?php //echo $form->label($model,'location'); ?>
    </div>

    <div class="column">
        <?php echo $form->label($model,'create_date'); ?>
        <?php //echo $form->textField($model,'create_date'); ?>
        <?php 
        echo "From : ";
            $this->widget('zii.widgets.jui.CJuiDatePicker',
            array(
            'name'=>'Satisfact[from_date]',
            'options'=>array('dateFormat'=>'yy-mm-dd',),            

            ));
        echo " To : ";
            $this->widget('zii.widgets.jui.CJuiDatePicker',
            array(
            'name'=>'Satisfact[to_date]',
            'options'=>array('dateFormat'=>'yy-mm-dd',),            

            )); 


        ?>
    </div>

    <div class="column">
        <?php echo CHtml::submitButton('Search'); ?>
    </div>

<?php $this->endWidget(); ?>

最佳答案

您的代码:

if(!empty($this->from_date) && empty($this->to_date)){
                $criteria->condition="create_date >= '$this->from_date'";
            }elseif(!empty($this->to_date) && empty($this->from_date)){
                $criteria->condition="create_date <= '$this->to_date'";
            }elseif(!empty($this->to_date) && !empty($this->from_date)){
                $criteria->condition="create_date >= '$this->from_date' and create_date<= '$this->to_date'";
            }

在上面的代码中 $this->from_date 是一个属性,您将它用作字符串,因为您在它周围放置了逗号。

'$this->from_date'

以上行在您的代码中是错误的,因为您可以在其中看到逗号。
尝试

$criteria->condition="create_date >=". $this->from_date;

关于mysql - YII 框架中按用户、位置和日期范围分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28913417/

相关文章:

php - Laravel 在循环中 Eloquent

json - YII-在表单验证中添加错误代码

java - Jython 网络应用性能

Angular 和 IIS WebApplication(或虚拟目录)

reactjs - 在 React Frontend 中安全存储身份验证 token

php - Yii::app()->user->isGuest 在重定向后返回 true..?

php - mysql 61表连接限制

php - 将数据发布到表: all data in table shows as 1

mysql - NOT IN 函数不适用于我的 mysql 版本

mysql - MySQL中INSERT可以返回不自动递增的ID吗