2016-02-08 80 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') 
相關問題