如何在MySQL 5.7中调试此“ SELECT列表不在GROUP BY子句中”错误?

时间:2018-08-18 04:04:42

标签: php mysql

我收到此错误

  

查询失败:SELECT列表的表达式#1不在GROUP BY子句中,并且包含未聚合的列'spidersc_exchanger2018.exchangerix_exchanges.exchange_id',该列在功能上不依赖于GROUP BY子句中的列;这与sql_mode = only_full_group_by

不兼容

这是我的代码

<?php
        $ee = 0;
        $res_query3 = "SELECT *, sum(exchange_amount) exchange_amount, sum(receive_amount) receive_amount FROM exchangerix_exchanges WHERE date_sub(curdate(), interval 7 day) <= created AND status='confirmed' GROUP BY from_currency, to_currency ORDER BY created DESC LIMIT 7";
        $res_result3 = smart_mysql_query($res_query3);

                $res2_query = "SELECT * FROM exchangerix_reviews r LEFT JOIN exchangerix_exchanges e ON r.exchange_id=e.exchange_id WHERE r.status='active' ORDER BY r.added LIMIT ".HOMEPAGE_REVIEWS_LIMIT;
                $res2_result = smart_mysql_query($res2_query);
                $total2_res = mysqli_num_rows($res2_result);
                $cc = 0;

                if ($total2_res > 0)
                {
            ?>

2 个答案:

答案 0 :(得分:0)

select *中的星号可能还会返回from_currency和to_currency(您在group by子句中聚合的键)之外的列。

select from_currency, to_currency, sum(exchange_amount)...

答案 1 :(得分:0)

两种清除方法是删除full_group by子句或在group by中添加所有选择列

 $res_query3 = "SELECT  sum(exchange_amount) exchange_amount, sum(receive_amount) receive_amount FROM exchangerix_exchanges WHERE date_sub(curdate(), interval 7 day) <= created AND status='confirmed' GROUP BY exchange_amount,receive_amount ,from_currency, to_currency ORDER BY created DESC LIMIT 7";

或 取消完整的group by子句,在查询下面执行

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));



 $res_query3 = "SELECT  *,sum(exchange_amount) exchange_amount, sum(receive_amount) receive_amount FROM exchangerix_exchanges WHERE date_sub(curdate(), interval 7 day) <= created AND status='confirmed' GROUP BY exchange_amount,receive_amount ,from_currency, to_currency ORDER BY created DESC LIMIT 7";

请记住,直到重新启动mysql为止,它才有效。如果重新启动,则将恢复默认设置