【问题标题】:How to Order a query如何订购查询
【发布时间】:2016-01-18 12:23:25
【问题描述】:

我有一个数组$sorted_array它的值是

Array ( [0] => 3 [1] => 1 [2] => 6 )

现在基于 $sorted_array 我创建了一个数组

$first_array = Yii::app()->db->createCommand()
            ->select('*')
            ->from('form_fields')                                      
             ->where(array('not in', 'id', $sorted_array))
             ->andWhere('form_id=:form_id', array(':form_id'=>$form_id))
             ->queryAll();

$sorted_array值是表form_fields的id(主键)。

当我运行这个查询时,我得到了数组$first_array,但不是我想要的顺序。即,我将按$id=1,3,6的顺序得到一个数组。

现在我想要的订单是 3,1,6(与 $sorted_array 完全相同)。我怎样才能按该顺序获得$first_array

【问题讨论】:

标签: php mysql arrays yii yii1.x


【解决方案1】:

您可以使用 ->order() 将 order('id') 添加到您的代码中:

 $first_array = Yii::app()->db->createCommand()
        ->select('*')
        ->from('form_fields')                                      
         ->where(array('not in', 'id', $sorted_array))
         ->andWhere('form_id=:form_id', array(':form_id'=>$form_id))
         ->order('id')
         ->queryAll();

否则,如果无法使用查询生成器构建您需要的查询,您可以使用

Yii::app()->db->createCommand("select * from your_table")->queryAll();

用于绑定参数

Yii::app()->db->createCommand(
        'select * from your_table  where yuor_field =:your_param')->
      bindValue('your_param',$yuor_value)->queryAll();

这将使用指定的 SQL 语句返回所有行

$sql = "select * from form_fields 
       where id not in (3,1,6) 
       and form_id = " . $form_id .
       "order by field(id, 3,6,1);";

$first_array = Yii::app()->db->createCommand($sql)->queryAll();

【讨论】:

  • 我认为按字段排序是我的问题
  • 好吧,在你发布之前我得到了答案,感谢@Sougata。但是感谢您的回答及其解释
猜你喜欢
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
  • 2017-07-30
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多