我收到此错误
查询失败: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)
{
?>
答案 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为止,它才有效。如果重新启动,则将恢复默认设置