2014-06-18 52 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

谢谢,我真的很感激 –