2016-02-08 32 views
0

我在尝试按Meds_Name的升序对以下选择查询进行排序,但无法弄清楚我做错了什么。相反,首先将所有以小写字母开头的名称排序,然后跟随以大写字母开头的名称。无法对查询结果按升序排序

当我在MySQL中解释并执行查询时,查询就可以正常工作,但不在Yii中。任何人都可以看到我要去哪里错了:

$specs = Yii::app()->db->createCommand() 
       ->select("im.*,m.name as Meds_Name,mf.name as Meds_Freq_name, 
          mr.name as Meds_Route_name,mu.name as Meds_Unit_name, 
          CONCAT_WS('/',im.Meds_StartMM,im.Meds_StartYYYY) as Meds_StartDate, 
          CONCAT_WS('/',im.Meds_EndMM,im.Meds_EndYYYY) as Meds_EndDate") 
       ->from('indiv_meds im') 
       ->leftJoin('meds m', 'im.Meds_Name=m.id') 
       ->leftJoin('med_freq mf', 'im.Meds_Freq=mf.id') 
       ->leftJoin('med_route mr', 'im.Meds_Route=mr.id') 
       ->leftJoin('lkpmeds mu', 'im.Meds_Unit=mu.id') 
       ->where($select_condition_declare) 
       ->limit($limit, $start) 
       ->order(array('Meds_Name asc')) 
       ->queryAll(); 

回答

1

这只是因为结果排序是基于ASCII码。您可以转换您的查询结果排序列小写解决问题/大写:

$specs = Yii::app()->db->createCommand() 
       ->select("im.*, LOWER(m.name) as Meds_Name,mf.name as Meds_Freq_name, 
          mr.name as Meds_Route_name,mu.name as Meds_Unit_name, 
          CONCAT_WS('/',im.Meds_StartMM,im.Meds_StartYYYY) as Meds_StartDate, 
          CONCAT_WS('/',im.Meds_EndMM,im.Meds_EndYYYY) as Meds_EndDate") 
       ->from('indiv_meds im') 
       ->leftJoin('meds m', 'im.Meds_Name=m.id') 
       ->leftJoin('med_freq mf', 'im.Meds_Freq=mf.id') 
       ->leftJoin('med_route mr', 'im.Meds_Route=mr.id') 
       ->leftJoin('lkpmeds mu', 'im.Meds_Unit=mu.id') 
       ->where($select_condition_declare) 
       ->limit($limit, $start) 
       ->order(array('Meds_Name asc')) 
       ->queryAll(); 
+0

感谢@Maouven。有关我如何做到这一点的任何提示? – sharcfinz

+0

使用'LOWER(m.name)作为Meds_Name'在我的回答中 – Maouven

1

好吧,我不知道很多关于Yii的,但这里是我认为可以帮助你:

->order(array('m.name asc')) 
->limit($limit, $start) 

“限制” 后,总是出现 “ORDER BY”


更新:

好懂了:)

@sharcfinz我一直在寻找在这里,并在此URL http://www.yiiframework.com/doc-2.0/guide-db-query-builder.html 他们用这种方式

new \yii\db\Query() 

的查询生成器,我看你是混合一点点查询生成器与直接SQL查询命令命令

Yii::app()->db->createCommand() 

您正在使用。

的 “createCommand()”,其时你要插入一个dentire SQL查询命令一样,直接

Yii::app()->db->createCommand("SELECT id, name FROM tableA")->queryAll(); 

,但使用用于 “ - >选择()”,“ - >序() ”等你必须要通过使用这种方式

$rows = (new \yii\db\Query()) 
    ->select(['id', 'email']) 
    ->from('user') 
    ->where(['last_name' => 'Smith']) 
    ->limit(10) 
    ->all(); 
+0

谢谢@Elias Rodrigues!我修好了。该问题仍然存在:( – sharcfinz

+0

检查答案的新更新:)并让我知道 –

+0

感谢您的帮助@Elias。我用这个和LOWER(m.name)的建议,这似乎已经做到了! – sharcfinz

0

变更单,

->order('m.Meds_Name asc') 
相关问题