【问题标题】:MariaDB server version for the right syntax to use near 'GROUP BYMariaDB 服务器版本,用于在 \'GROUP BY 附近使用正确的语法
【发布时间】:2022-11-12 17:36:25
【问题描述】:

我基于 Laravel 9 构建我的项目,并尝试按日期组获取计数数据。我使用 DB::raw 来获取这样的 sql 查询:

                $rawActive = "
                SELECT
                    SBC.SITE,
                    OPR.OPERATOR,
                    COUNT(*) TMO_COUNT,
                    DATE_FORMAT( TMO.TMO_DATE, '%m%Y' ) BULANTAHUN 
                FROM
                    TOP_TMO TMO
                    INNER JOIN SUBSCRIBER SBC ON TMO.SUBSCRIBER_ID = SBC.ID
                    INNER JOIN OPERATOR OPR ON SBC.SITE_ID = OPR.ID 
                WHERE
                    SBC.SITE_ID = ".$siteId." 
                GROUP BY
                    DATE_FORMAT(
                    TMO.TMO_DATE,
                    '%m%Y')
                ";
            
                $queryAct = DB::select(DB::raw($rawActive));

siteId 来自表单请求。

我搜索了一些解决方案,包括在 database.php 中编辑 'strict' => false, ,但仍然没有找到任何解决方案。

我尝试return $rawActive,这就是结果。

SELECT
SBC.SITE,
OPR.OPERATOR,
COUNT(*) TMO_COUNT,
DATE_FORMAT( TMO.TMO_DATE, '%m%Y' ) BULANTAHUN
FROM
TOP_TMO TMO
INNER JOIN SUBSCRIBER SBC ON TMO.SUBSCRIBER_ID = SBC.ID
INNER JOIN OPERATOR OPR ON SBC.SITE_ID = OPR.ID
WHERE
SBC.SITE_ID = 134
GROUP BY
DATE_FORMAT(
TMO.TMO_DATE,
'%m%Y')

如您所见,siteId 很好看。

我也在 mysql 上尝试了这个查询,它工作正常。

谢谢你的帮助。

【问题讨论】:

  • dd($siteId)并显示结果
  • 没有问题,结果符合我输入的要求。 $siteId = $request->site_id; 。我输入 123 它返回 123
  • 您的 SQL 语法没问题。我什至在 SQL 验证器中检查了它。根据您提供的信息,我认为没有发生这种情况的原因。 'strict' => false 与您的语法错误有什么关系?
  • 提供价值$rawActive 会导致错误,而不是创建此值的代码。
  • @ac.0101010111 我寻找解决方案并找到了该选项,但它没有用。它仍然有同样的错误

标签: sql laravel mariadb


【解决方案1】:

您需要调整configdatabase.php 如下:

'mysql' => [
    ...
    ....
    'strict' => true,
    'modes' => [
        //'ONLY_FULL_GROUP_BY', // Disable this to allow grouping by one column
        'STRICT_TRANS_TABLES',
        'NO_ZERO_IN_DATE',
        'NO_ZERO_DATE',
        'ERROR_FOR_DIVISION_BY_ZERO',
        'NO_AUTO_CREATE_USER',
        'NO_ENGINE_SUBSTITUTION'
    ],
]

【讨论】:

  • 谢谢你的回答,但它不起作用。它仍然有同样的错误
  • 你的 MarriaDB 版本是多少?
  • 10.4.21-MariaDB-1:10.4.21+maria~焦点日志
【解决方案2】:

你可以试试这个。

$rawActive = "
                SELECT
                    SBC.SITE,
                    OPR.OPERATOR,
                    COUNT(*) TMO_COUNT,
                    DATE_FORMAT( TMO.TMO_DATE, '%m%Y' ) BULANTAHUN 
                FROM
                    TOP_TMO TMO
                    INNER JOIN SUBSCRIBER SBC ON TMO.SUBSCRIBER_ID = SBC.ID
                    INNER JOIN OPERATOR OPR ON SBC.SITE_ID = OPR.ID 
                WHERE
                    SBC.SITE_ID = '".$siteId."' 
                GROUP BY
                    DATE_FORMAT(
                    TMO.TMO_DATE,
                    '%m%Y')
                ";
            
                $queryAct = DB::select(DB::raw($rawActive));

【讨论】:

    猜你喜欢
    • 2017-08-26
    • 2017-10-25
    • 2017-09-30
    • 2018-01-20
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    相关资源
    最近更新 更多