2017-08-24 90 views
1

我是yii2的新手,我遇到了SQL問題。我如何寫我的SQL如何在yii2中使用複雜的SQL代碼

WITH TabDelimOfValue as (SELECT personaltab.last_name, personaltab.first_name, personaltab.middle_name, personaltab.cur_assign, personaltab.appttype, personaltab.dateorig_appt,svctable.positionID, svctable.datefr, svctable.dateto, svctable.empno, svctable.grade_incre as val 
FROM svctable INNER JOIN personaltab ON personaltab.empno = svctable.empno WHERE svctable.dateto = '1900-01-01' AND personaltab.perstatus like 'ACTIVE') 
SELECT 
     empno, 
     CAST(substring(val, 0, charindex('-', val)) as int) as grade, 
     substring(val, (charindex('-', val) + 1), (len(val) - charindex('-', reverse(val)))) as increment, 
     val as grade_incre, last_name, first_name, middle_name, cur_assign, appttype, dateorig_appt, positionID, datefr, dateto 
FROM TabDelimOfValue ORDER BY grade DESC, increment DESC, positionID; 

到SQLDataProvider?

+0

也許是更好的寫一個存儲過程。 –

回答

1

對於複雜的查詢,你可以使用一個創建命令如:

$sql = " WITH TabDelimOfValue as (
      SELECT personaltab.last_name 
       , personaltab.first_name 
       , personaltab.middle_name 
       , personaltab.cur_assign 
       , personaltab.appttype 
       , personaltab.dateorig_appt 
       , svctable.positionID 
       , svctable.datefr 
       , svctable.dateto 
       , svctable.empno 
       , svctable.grade_incre as val 
      FROM svctable 
      INNER JOIN personaltab ON personaltab.empno = svctable.empno 
      WHERE svctable.dateto = '1900-01-01' AND personaltab.perstatus like 'ACTIVE' 
    ) 
     SELECT 
       empno 
       , CAST(substring(val, 0, charindex('-', val)) as int) as grade 
       , substring(val, (charindex('-', val) + 1), (len(val) - charindex('-', reverse(val)))) as increment 
       , val as grade_incre 
       , last_name 
       , first_name 
       , middle_name 
       , cur_assign 
       , appttype 
       , dateorig_appt 
       , positionID 
       , datefr 
       , dateto 
     FROM TabDelimOfValue 
     ORDER BY grade DESC, increment DESC, positionID;"; 

$command = Yii::$app->db->createCommand($sql); 

$models = $command->queryAll();