MariaDb 不支持 ANY_VALUE() 函数

Sin*_*ful 1 php mysql sql mariadb laravel

我有一个连接到 mysql db 的 Laravel 项目,当我更改我的服务器时,我的代码失败了,因为我的新服务器有一个Mariadb,当我检查我的日志时,我意识到,MariaDb 有一些不受支持的功能ANY_VALUE()

如何根据 MariaDb 编辑我的 sql?

select(DB::raw('SUM(price) as price, SUM(price_now) as price_now, 
   ANY_VALUE(price_available) as price_available'),'adult_count')
Run Code Online (Sandbox Code Playgroud)

错误日志

Ric*_*mes 8

今天,你已经解决了这个问题。但是明天,当您运行相同的查询时,您将收到不同的错误。

在旧版本的 MySQL 或 MariaDB 中,price_available如果不是,您将获得“任何价值” GROUPing BY。这实际上介于“不良做法”和“违反标准”之间。相对最近,MariaDB,然后是后来的 MySQL,切换到“only full group by”。当时,ANY_VALUE()为 MySQL 应运而生,但显然 MariaDB 丢了球。

对于旧版本和新版本都应该安全的旧解决方法是使用MIN(price_available)或其他一些聚合函数。(如果该列可能有NULL,则各种聚合可能会也可能不会NULL以您喜欢的方式处理。)

另请参阅ONLY_FULL_GROUP_BY设置。


Sin*_*ful -2

我已经解决了替换这个:

select(DB::raw('SUM(price) as price, SUM(price_now) as price_now, 
    ANY_VALUE(price_available) as price_available'),'adult_count')
Run Code Online (Sandbox Code Playgroud)

select(DB::raw('SUM(price) as price, SUM(price_now) as price_now, 
    price_available as price_available'),'adult_count')
Run Code Online (Sandbox Code Playgroud)