go xorm 复杂的查询

发布于 2022-09-11 23:26:52 字数 1787 浏览 19 评论 0

项目中好多个表都有需要使用多字段的查询,想依此封装函数供各个模型调用,感觉好难实现啊。

请大家帮我看看我定义的这种请求的数据结构有没有问题

不知道大家在go中使用什么orm,还是直接使用原生。我用的是xorm

给个思路呗~~~

数据库模型go

type TestTable struct {
    int Id
    string Name
    int Created
    int Version
}

请求查询的数据json

{
    "limit":10,
    "offset":10,
    "asc":["id","name"],
    "desc":["created","updated"],
    "and":{
        "id":{// `id` > 33
            "cond":"GT",
            "values":[33]
        },
        "name":{// `name` LIKE '%test%'
            "cond":"LIKE",
            "values":["test"]
        },
        "created":{// `created` BETWEEN 1570000000 AND 1580000000
            "cond":"BETWEEN",
            "values":[1570000000,1580000000]
        },
        "version":{// `version` IN (1,2,3,4,5) 下面or条件同理
            "cond":"IN",
            "values":[1,2,3,4,5]
        }
    },
    "or":{
        "id":{
            "cond":"LTE",
            "values":[32]
        },
        "name":{
            "cond":"LIKE",
            "values":["demo"]
        },
        "created":{
            "cond":"BETWEEN",
            "values":[1570000000,1589999999]
        },
        "version":{
            "cond":"IN",
            "values":[6,7,8,9,10]
        }
    }
}

想要生成的查询语句mysql

SELECT * FROM `test_table` WHERE
(`id` > 33 AND `name` LIKE '%test%' AND `created` BETWEEN 1570000000 AND 1580000000 AND `version` IN (1,2,3,4,5))
OR
(`id` <= 32 AND `name` LIKE '%demo%' AND `created` BETWEEN 1570000000 AND 1589999999 AND `version` IN (6,7,8,9,10))
ORDER BY `id`,`name` ASC , `created`,`updated` DESC LIMIT 10,10;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

最近可好 2022-09-18 23:26:52

gorm不错。http://gorm.book.jasperxu.com/
推荐使用!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文