2012-10-03 32 views
3

我的数据库表被命名为'status'并且它有一个名为'order'的列,该列的类型为float。在Yii中对CHtml :: listData进行排序

我想根据从最低到最高的顺序排列状态字段,并将这些字段输入到下拉列表中。

这是我使用的代码:

echo $form->dropDownListRow($my_model, 'status', CHtml::listData(Status::model()->findAll(array('order'=>"'order' ASC")), 'id', 'name'), array('class'=>'span3','prompt'=>Yii::t('forms', 'Please Select A Status'))); 

但列表始终按状态ID进行排序。我需要做一些类型转换吗?如果是这样,我将如何强制查询我的查询,以便按'order'升序排序?

回答

4

您指定的顺序不正确:

array('order'=>"'order' ASC") 

周围有order(列名),这意味着,实际上你是不是在排序的所有额外的引号。删除引号来解决问题,而是把反引号在自己的位置,因为order是MySQL中的保留字:

array('order'=>"`order` ASC") 
+0

如果我不逃“秩序”,然后我得到这个错误信息:'CDbCommand失败执行SQL语句:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法中有错误;请检查与您的MySQL服务器版本对应的手册,以便在第1行的'order ASC'附近使用正确的语法。执行的SQL语句为:SELECT * FROM'status''t' ORDER BY order ASC' – ews2001

+0

@ ews2001:In事后看来很明显,它会出错,因为“订单”是MySql中的保留字。因此,您需要在其周围放置*反引号*,就像查询中的'status'一样。 – Jon

+0

Ahhh,反引人注目,伎俩......谢谢! – ews2001