【发布时间】:2017-03-17 08:28:11
【问题描述】:
我有一个问题:
SELECT DATE_FORMAT(created_at,'%Y-%m') as x, COUNT(created_at) as y FROM table GROUP BY DATE_FORMAT(created_at,'%Y-%m') ORDER BY id DESC LIMIT 12;
它在 MySQL Workbench 中有效,但是当我使用 DB::select(); 在 Laravel 中粘贴查询时,返回以下错误:
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'user.table.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (SQL: SELECT DATE_FORMAT(created_at,'%Y-%m') as x, COUNT(created_at) as y FROM table GROUP BY DATE_FORMAT(created_at,'%Y-%m') ORDER BY id DESC LIMIT 12;)
当我删除ORDER BY id DESC 时,它工作得很好,但我需要反转表格并只选择最后 12 行。任何想法如何解决它?
【问题讨论】:
-
还要在查询中选择 ID,而不仅仅是
x和y。 -
我不能。这些数据将 json 编码并传递给 Morris.js 线图,但我已经解决了我的问题。我在 GROUP BY 语句中添加了 id,它起作用了!
-
如果您想执行整个查询,请尝试 DB::raw()。如果使用 DB::select(),则不能在其中插入整个查询
-
请发布您的 laravel 代码。最好了解您可能在代码中丢失的位置
-
解决了。这是我的代码-> $data = json_encode(DB::select("SELECT DATE_FORMAT(created_at,'%Y-%m') as x, COUNT(created_at) as y FROM table GROUP BY DATE_FORMAT(created_at,'%Y -%m'), id ORDER BY id DESC LIMIT 12;"));
标签: mysql laravel laravel-5 group-by sql-order-by