升级MySQL版本时GROUP BY无效

时间:2017-10-30 08:11:44

标签: mysql

当我将ubuntu从15.10升级到16.04时,我的yii项目出现了这个错误:

  

CDbCommand无法执行SQL语句:SQLSTATE [42000]:   语法错误或访问冲突:1055 SELECT列表的表达式#1不在GROUP BY子句中,并且包含非聚合列   'v4master.A.id',它在功能上不依赖于列   GROUP BY子句;这是不相容的   的sql_mode = only_full_group_by。执行的SQL语句是:

sql代码如下:

 $sql = "SELECT A.*,B.`type_name` FROM `".$this->tbl_auth_user_items."` A 
                INNER JOIN `".$this->tbl_auth_context_types."` B ON A.`type_id` = B.`type_id` 
                WHERE A.`user_id` = '".$user_id."' GROUP BY A.`type_id`, A.`type_value` ORDER BY A.`type_id` DESC";
         return $this->_db->createCommand($sql)->queryAll(); 

2 个答案:

答案 0 :(得分:0)

表示您的升级意味着db升级到mysql 5.7,如果是这样,您必须知道 从mysql 5.7开始,默认情况下不允许在没有聚合功能的情况下使用列而不在group by中提及

如果你需要不同的结果集,ypu应该使用distinct子句而不是分组

$sql = "SELECT DISTINCT 
        A.*,B.`type_name` 
        FROM `".$this->tbl_auth_user_items."` A 
        INNER JOIN `".$this->tbl_auth_context_types."` B ON A.`type_id` = B.`type_id` 
        WHERE A.`user_id` = '".$user_id."' 
        ORDER BY A.`type_id` DESC";
     return $this->_db->createCommand($sql)->queryAll(); 

或(但已弃用)您可以更改sql_mode以恢复为先前版本行为

来回

 sql_mode = 'ONLY_FULL_GROUP_BY';

 SET sql_mode = ''

答案 1 :(得分:0)

在Mysql上运行此查询;

Class App extends Component{ render(){ return( <Section> <Content content="HELLO WORLD!" /> <Content content="HELLO UNIVERSE!" /> </Section> ) } }