2012-12-28 41 views
1

我想在yii中編寫查詢。我有以下工作yii多個內連接

$criteria = new CDbCriteria; 
$criteria->condition = "($column = :id)"; 
$criteria->params = array(":id" => $id); 
$rows = Jobs::model()->with('pROJ')->findAll($criteria); 

這將返回數組中的作業模型。我需要寫在警予下面的查詢返回的模型

SELECT jobs.JOBNO, jobs.STATUS, projects.ORDERNO, jobs.PROJID, jobs.NAME, jobs.SEQ, jobs.PCENTDONE, jobs.EARNED, jobs.VALUE, jobs.DATEIN, jobs.DATEDONE, jobs.DATEDUE, jobs.SENTBACK, jobs.ORIGTAPES, jobs.COMMENTS, projects.CATEGORY, orders.BIDNO 
FROM (jobs INNER JOIN projects ON jobs.PROJID = projects.PROJID) INNER JOIN orders ON projects.ORDERNO = orders.ORDERNO 
where jobs.projid =  3002001 
ORDER BY jobs.JOBNO, jobs.PROJID 

我曾嘗試以下,但它不工作

$rows = Yii::app()->db->createCommand() 
      ->select('jobs.*, projects.ORDERNO, projects.CATEGORY, orders.BIDNO') 
      ->from('jobs, projects, orders') 
      ->join('projects p','jobs.PROJID = p.PROJID') 
      ->join('orders o', 'p.ORDERNO = o.ORDERNO') 
      ->where('jobs.projid=:id', array(':id'=>$id)) 
      ->queryRow(); 

我收到以下錯誤

CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'jobs.PROJID' in 'on clause'. The SQL statement executed was: SELECT `jobs`.*, `projects`.`ORDERNO`, `projects`.`CATEGORY`, `orders`.`BIDNO` 
FROM `jobs`, `projects`, `orders` 
JOIN `projects` `p` ON jobs.PROJID=p.PROJID 
JOIN `orders` `o` ON p.ORDERNO=o.ORDERNO 
WHERE jobs.projid=:id 

我已更新至

$rows = Yii::app()->db->createCommand() 
       ->select('jobs.*, projects.orderno, projects.category, orders.bidno') 
       ->from('jobs') 
       ->join('projects p','jobs.projid = p.projid') 
       ->join('orders o', 'p.orderno = o.orderno') 
       ->where('jobs.projid=:id', array(':id'=>$id)) 
       ->queryRow(); 

但我仍然得到錯誤。在MySQL中的所有列都CAPS

CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'projects.orderno' in 'field list'. The SQL statement executed was: SELECT `jobs`.*, `projects`.`orderno`, `projects`.`category`, `orders`.`bidno` 
FROM `jobs` 
JOIN `projects` `p` ON jobs.projid = p.projid 
JOIN `orders` `o` ON p.orderno = o.orderno 
WHERE jobs.projid=:id 
+0

在特定的操作系統,如Linux,MySQL表/列名稱是區分大小寫。 – DCoder

+2

'SELECT ... projects.orderno ...加入項目p'。你把'projects'設置爲'p',所以你不能再使用'projects'。 – DCoder

回答

6

由於@直流電說:您的選擇現在應該閱讀select('jobs.*, p.orderno, p.category, o.bidno')。爲了保持一致性,你也應該別名jobs如下

$rows = Yii::app()->db->createCommand() 
      ->select('j.*, p.orderno, p.category, o.bidno') 
      ->from('jobs j') 
      ->join('projects p','j.projid = p.projid') 
      ->join('orders o', 'p.orderno = o.orderno') 
      ->where('j.projid=:id', array(':id'=>$id)) 
      ->order('j.jobno,j.projid') 
      ->queryRow(); 
1

我想你應該刪除項目,從->from('jobs, projects, orders')訂單,可能是你應該降低jobs.PROJID的情況下,你的錯誤消息說,它無法找到該列。