语法错误或访问冲突:1055'database.order.oid'不在GROUP BY中

时间:2018-08-28 09:40:32

标签: mysql laravel

下面是我的sql代码,可以正常工作

SELECT oid, date(ordered_on) AS ord, count(date(ordered_on)) AS cnt
FROM order
GROUP BY ord DESC
LIMIT 10

但是当我在laravel中应用它时,我无法评估结果。下面是laravel代码

DB::table('order')
            ->select(DB::raw('oid, date(ordered_on) as ord, count(date(ordered_on)) as cnt'))
            ->groupBy('ord')
            ->orderBy('oid', 'desc')
            ->limit(10)
            ->get();

2 个答案:

答案 0 :(得分:2)

理想情况下,您的原始MySQL查询应该不起作用,因为它没有多大意义。我感觉您想要做的是按日期获取记录数。如果是这样,那么您需要此查询:

SELECT DATE(ordered_on), COUNT(*) AS cnt
FROM `order`
GROUP BY DATE(ordered_on);

这将暗示以下Laravel代码:

DB::table('order')
    ->select(DB::raw('DATE(ordered_on) AS ord, COUNT(*) AS cnt'))
        ->groupBy('ord')
        ->orderBy('ord', 'desc')
        ->limit(10)
        ->get();

顺便说一句,不要使用order之类的保留MySQL关键字来命名您的表,列等。我需要在查询中转义order,并且您将需要永久做同样的事情。

答案 1 :(得分:0)

您在laravel中使用严格模式。您可以根据自己的需要进行调整。

在设置config/database.php中进入strict=>false,您就可以参加了。

  'mysql' => [
          // ....

            'strict' => false
        ],