MariaDb不支持ANY_VALUE()函数

时间:2019-01-13 10:32:46

标签: php mysql sql laravel mariadb

我有一个连接到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')

error log

2 个答案:

答案 0 :(得分:3)

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

在旧版本的MySQL或MariaDB中,如果price_available不是GROUPing BY,则将为ANY_VALUE()获得“任何值”。实际上,这介于“不良做法”和“违反标准”之间。相对而言,MariaDB和后来的MySQL切换为“仅完整分组依据”。那时,MIN(price_available)出现在MySQL中,但显然MariaDB放弃了。

对于旧版本和新版本都应该安全的旧解决方法是使用ONLY_FULL_GROUP_BY或其他一些聚合函数。

另请参阅import sqlite3 as sql from os import path ROOT = path.dirname(p/Users/matthewdeyn/Coffea/app.pyath.relpath((__file__))) def create_post(name, content): con = sql.connect(path.join(ROOT, 'database.db')) cur = con.cursor() cur.execute('insert into posts (name, content) values(?, ?)', (name, content)) con.commit() con.close() def get_posts(): con = sql.connect(path.join(ROOT, 'database.db')) cur = con.cursor() cur.execute('select * from posts') posts = cur.fetchall() return posts 设置。

答案 1 :(得分:0)

我已经解决了替换问题:

选择(DB :: raw('SUM(price)作为价格,SUM(price_now)作为price_now,    ANY_VALUE(price_available)as price_available'),'adult_count')

选择(DB :: raw('SUM(price)作为价格,SUM(price_now)作为price_now,    price_available as price_available'),'adult_count')