2016-01-18 8 views
0

У меня есть массив $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.

Когда я запускаю этот запрос, я получаю массив $first_array, но не в том порядке, в котором я его хочу. т.е. я получаю массив в порядке $ id = 1,3,6.

Теперь мой желаемый заказ - 3,1,6 (точно так же, как $sorted_array). Как я могу получить $first_array в таком порядке?

+1

http://www.yiiframework.com/forum/index.php/topic/11269-order-by-field-in-cdbcriteria/ –

+0

@Sougata благодарит своих идеальное решение: - заказ на поле – Bloodhound

ответ

1

можно сделать с помощью -> заказ() Добавить заказ («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(); 

в противном случае, если не possibile построить запрос, который нужно с построитель запросов вы можете использовать

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(); 
+0

Я думаю, что порядок по полю является одним из моих проблем – Bloodhound

+0

У меня есть ответ на вопрос. Надеюсь, полезно – scaisEdge

+0

Хорошо, я получил ответ, прежде чем вы отправили его courtsey @Sougata. Но спасибо за ответ и его объяснение – Bloodhound