Laravel查询生成器中的SQL查询GROUP BY问题

时间:2018-07-23 08:01:22

标签: mysql laravel lumen laravel-query-builder

我编写了以下MySQL查询,以获取每个用户以及最后一条消息的用户收件箱消息...

$(document).ready(function() {

var $toggleButton = $('.toggle-button'),
    $menuWrap = $('.menu-wrap'),
    $sidebarArrow = $('.arrow');

// Hamburger button

$toggleButton.on('click', function() {
    $(this).toggleClass('button-open');
    $menuWrap.toggleClass('menu-show');
});

// Sidebar navigation arrows

$sidebarArrow.click(function() {
    $(this).next().slideToggle(300);
});

});

我使用的Laravel方法...

select *, `chat_channel` as `channel`, MAX(id) as max_id from `messages` 
where (`message_to` = 2 or `message_from` = 2) 
and (`delete_one` <> 2 and `delete_two` <> 2) 
group by `channel` 
order by `max_id` desc limit 40 offset 0

但是,当我在phpMyAdmin中运行此查询时,遇到以下错误...

  

1055-SELECT列表的表达式#1不在GROUP BY子句中,并且包含未聚合的列'db.messages.id',该列不是   功能上取决于GROUP BY子句中的列;这是   与sql_mode = only_full_group_by

不兼容

当我直接运行Laravel代码时,我没有收到任何错误,但确实按预期将记录排序了。

2 个答案:

答案 0 :(得分:0)

转到phpMyAdmin -> YourDB -> SQL Tab

使用以下命令:

SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY';

这将只为您的sql启用完全group by。

要恢复上述命令更改,请使用:

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

答案 1 :(得分:0)

它是用于聚合的mysql的STRICT MODE。 请注意,当您按某项分组并选择另一个非聚合字段时,该字段的值不正确为100%。汇总字段类似于您要分组的字段,count(field)sum(field)等... p

如果您愿意冒险,请转到config\database.php并将strict => true修改为false

'prefix' => '',
'strict' => false,
'engine' => null,

不建议这样做,您应该在join group by

上使用select重做查询
select x from table right join (select gb from table group by gb) as grouped on grouped.gb = table.gb

类似的东西