Yii范围与联盟

时间:2014-11-14 09:47:39

标签: php yii

调用store

时,我有一个名为actionIndex()的当前模型

它将表格中的数据显示为Select * FROM store

如何编辑Scope到此?还是有另一种方法可以做到这一点,而不使用Scope?

SELECT j.* FROM 
    (
        (
            SELECT *
            FROM `make` AS v
            JOIN `ads` AS a
            ON (v.id=a.make_code)
            GROUP BY v.make
        )
        UNION
        (
            SELECT *
            FROM `store` AS d
            JOIN `make` AS v
            ON (v.id=d.make)
            GROUP BY d.make
        )
    ) AS j GROUP BY j.make

我试过这个,但收到错误

public function Scope(){
    return array(
        '_with'=>array(
            'alias' => 'd',
            'select'=>array('j.* 
                            (
                                ( 
                                    SELECT *
                                    FROM `make` AS v
                                    JOIN `ads` AS a
                                    ON (v.id=a.make_code)
                                    GROUP BY v.make
                                )
                                UNION
                                (
                                     SELECT *
                                     FROM `store` AS d
                                     JOIN `make` AS v
                                     ON (v.id=d.make)
                                     GROUP BY d.make
                                )
                            ) AS j'
            ),
            'group'=>'j.make',
        )
    );
}

这是错误消息

CDbCommand failed to execute the SQL statement: SQLSTATE[42000]: 
Syntax error or access violation: 1064 You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the right syntax to use near
'(
    (
        SELECT *' at line 2. The SQL statement executed was: SELECT j.*
            (
                (
                    SELECT *
                    FROM `make` AS v
                    JOIN `ads` AS a
                    ON (v.id=a.make_code)
                    GROUP BY v.make
                )
                UNION
                (
                    SELECT *
                    FROM `store` AS d
                    JOIN `make` AS v
                    ON (v.id=d.make)
                    GROUP BY d.make
                )
            ) AS j FROM `store` d WHERE d.pending!="1" GROUP BY j.make sq 

1 个答案:

答案 0 :(得分:0)

问题是您没有设置from。您也可以从from中创建一个sql视图,然后使用它。它使您的代码更清晰。

public function Scope(){
    return array(
        '_with'=>array(
            'alias' => 'd',
            'select'=>array('j.*'); 
            'from'  => '(
                                ( 
                                    SELECT *
                                    FROM `make` AS v
                                    JOIN `ads` AS a
                                    ON (v.id=a.make_code)
                                    GROUP BY v.make
                                )
                                UNION
                                (
                                     SELECT *
                                     FROM `store` AS d
                                     JOIN `make` AS v
                                     ON (v.id=d.make)
                                     GROUP BY d.make
                                )
                            ) AS j',
            'group'=>'j.make',
        )
    );
}