2014-06-18 81 views
0

我builing與警予的應用程序,我試圖做我的SQL調用「非常道」使用警予查詢生成器以相同的方式看到了這個指南警予的MySQL

http://www.yiiframework.com/doc/guide/1.1/en/database.query-builder

上這是我建立的查詢:

$diseaseCountSqlQuery = Yii::app()->db->createCommand() 
            ->select ('tbl_disease.ICD10, COUNT(tbl_disease.ICD10) AS disease_count') 
            ->from ('tbl_disease') 
            ->join ('tbl_symptom_disease', 'ICD10=diseaseCode') 
            ->where ($symptomsOrQueryArray) 
            ->group ('ICD10') 
            ->queryAll(); 
      //placeholder 

      $maxDiseaseCountQuery = Yii::app()->db->createCommand() 
            ->select ('MAX(disease_count) AS max_disease_count') 
            ->from ($diseaseCountSqlQuery) 
            ->queryAll(); 
      //multiple symptom query 
      $diseaseCodes = Yii::app()->db->createCommand() 
          ->select ('ICD10') 
          ->from ($maxDiseaseCountQuery) 
          ->join ($diseaseCountSqlQuery, 'max_disease_count=disease_count') 
          ->queryAll(); 

的問題在第二個命令將顯示具體線路:

->from ($diseaseCountSqlQuery) 

我得到一個「strpos()期望參數1是字符串,數組給定」錯誤。

我可以解決我的問題,只需將整個mysql命令複製到一個字符串,然後使用create命令,但我想用這個更「優雅」的方式。有人可以幫我修復它,並解釋一下子查詢如何與查詢構建器一起工作?謝謝:)

+0

錯誤告訴你到底是什麼問題:你想使用其中一個字符串預計的數組。你需要做一個'foreach($ diseaseCountSqlQuery作爲$ part){...-> from($ part)}'或者其他任何東西。 –

+0

好吧,那麼有沒有辦法在不同的查詢中使用sql命令的結果表? –

回答

1

你不能像這樣創建子查詢。第一個queryAll返回一個包含結果的數組。你不能像查詢數據庫那樣查詢它。 from()部分需要一個字符串形式的參數,而不是一個數組。

試試這樣說:

Yii::app()->db->createCommand('complete query, including subquery')->queryAll(); 

或者使用PHP執行第一次查詢後篩選結果。

上createCommand更多信息: http://www.yiiframework.com/doc/api/1.1/CDbConnection#createCommand-detail http://www.yiiframework.com/doc/api/1.1/CDbCommand

+0

你有沒有任何有用的資源,所以我可以理解createCommand的使用方式更好? –

+0

看看我已經添加到答案的鏈接。 – jagsler

+0

謝謝,我真的很感激 –