Golang Go语言中 xorm 是否不支持 MySQL 的 FIND_IN_SET 查询?

发布于 1周前 作者 wuwangju 来自 Go语言

Golang Go语言中 xorm 是否不支持 MySQL 的 FIND_IN_SET 查询?
用的是 github.com/xormplus/xorm
想实现 MySQL 的以下查询:
select * from tag where FIND_IN_SET(tag, ‘a,b,c,d’)

err := engine.Select(“tag,score”).Where(“FIND_IN_SET(tag,’?’)”, tagstr).Find(&tags)
ShowSQL 打印出 SQL 如下:
[SQL] SELECT tag,score FROM t_tag WHERE (FIND_IN_SET(tag,’?’)) [a,b,d]

错误信息:
sql: expected 0 arguments, got 1

网上搜索,也看了官方手册没有 FIND_IN_SET 相关资料(不能换成 IN 查询)。

按手册又换成:engine.Sql(“select * from tag where id =?”, 16).Find(&tags),提示 Sql 方法不存在。。

刚接触 go 语言,也没法深入排查,请问是 xorm 就没有实现对 FIND_IN_SET 的支持吗?


更多关于Golang Go语言中 xorm 是否不支持 MySQL 的 FIND_IN_SET 查询?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

建议你不要用 orm 对个人发展和公司都不好

更多关于Golang Go语言中 xorm 是否不支持 MySQL 的 FIND_IN_SET 查询?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


.Select(“tag,score”).Where(“FIND_IN_SET(tag,?)”, “1,2,3”).Find(&rs)
[xorm] [info] 2020/12/25 13:41:08.622700 [SQL] SELECT tag,score FROM m_tag WHERE (FIND_IN_SET(tag,?)) [1,2,3] - 1.623635ms
[{0 2 5}] <nil>
我试了下没啥问题啊

可以了,(tag,’?’) -> (tag,?)就行了,我也想着是不是这里的引号问题,也测试过。。谢谢

在Golang的Go语言中,xorm库作为一个强大的ORM(对象关系映射)工具,广泛用于与多种数据库进行交互,包括MySQL。关于xorm是否支持MySQL的FIND_IN_SET查询,这里有一些关键点需要说明。

xorm本身并不直接封装所有MySQL的特定函数,如FIND_IN_SET,因为它旨在提供一个跨数据库平台的通用接口。然而,这并不意味着你不能在xorm中使用FIND_IN_SET。你可以通过xorm的Raw方法或Exec方法直接执行原生SQL查询,包括那些包含FIND_IN_SET的查询。

例如,如果你需要在查询中使用FIND_IN_SET,可以这样做:

results, err := engine.Raw("SELECT * FROM your_table WHERE FIND_IN_SET(?, your_column)", yourValue).QueryRows()
if err != nil {
    // 处理错误
}
for _, row := range results {
    // 处理结果
}

在这个例子中,engine是你的xorm引擎实例,your_tableyour_column分别替换为你的表名和列名,yourValue是你要查找的值。

总之,虽然xorm没有直接封装FIND_IN_SET函数,但你仍然可以通过执行原生SQL查询来使用它。这种方法提供了灵活性,让你能够利用MySQL的特定功能,同时仍然享受xorm提供的ORM便利。

回到顶部