【问题标题】:SQL query works in Workbench, but not in LaravelSQL 查询在 Workbench 中有效,但在 Laravel 中无效
【发布时间】: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,而不仅仅是 xy
  • 我不能。这些数据将 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


【解决方案1】:

您正在使用 group by ,并且 group by 您的 id 不同,不会在此查询中选择。 你可以使用 x 的顺序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-02
    • 2013-01-24
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    相关资源
    最近更新 更多