我正在用yii构建一个应用程序,我尝试使用yii查询构建器以相同的方式进行sql调用
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命令来解决我的问题,但我想使用这种更"优雅"的方式。有人能帮我修复它,并解释一下子查询如何与查询生成器工作?谢谢:)
您不能创建这样的子查询。第一个queryAll
返回一个包含结果的数组。你不能像查询数据库那样查询它。from()
部分需要字符串形式的参数,而不是数组形式的参数。
试着这样写:
Yii::app()->db->createCommand('complete query, including subquery')->queryAll();
或者使用PHP在执行第一个查询后过滤结果。
关于createCommand的更多信息:http://www.yiiframework.com/doc/api/1.1/CDbConnection#createCommand-detailhttp://www.yiiframework.com/doc/api/1.1/CDbCommand