Golang SQLBoiler returns 当 运行 orderby 时什么都没有
Golang SQLBoiler returns nothing when running orderby
我在 Go 上使用 SqlBoiler 将请求发送到 PostgreSQL 数据库,但是当我尝试通过其中一个字段对数据库进行排序时,它 returns 0 行。
起初我运行一个计数(如下详述),如果计数returns大于或等于一行,那么我查询数据库以获取所有结果。
这 returns 正确的行数:
res, _ := models.MT(
Where("(mt_mas = ? or mt_mem like ?) and mt_group = ?", uint(uid), `%"`+strconv.Itoa(uid)+`"%`, bool(mt_group_bool)),
).Count(CTX, DB)
这 returns 没有行,尽管查询参数完全相同:
res, _ := models.MT(
Where("(mt_mas = ? or mt_mem like ?) and mt_group = ?", uint(uid), `%"`+strconv.Itoa(uid)+`"%`, bool(mt_group_bool)),
OrderBy(`mt_mas`),
).Count(CTX, DB)
这是我在检查行数后获取所有行的方式:
res, err := models.MT(
Where("(mt_mas = ? or mt_mem like ?) and mt_group = ?", uint(uid), `%"`+strconv.Itoa(uid)+`"%`, bool(mt_group_bool)),
OrderBy(`mt_mas`),
).All(CTX, DB)
从上面的请求中读取错误时,它打印出 <nil>
并且一切正常。
数据库为Postgres(版本PostgreSQL 13.3),列如下:
- mt_mas(整数)
此列包含此行所有者的 uid。
- mt_mem(字符变化 [1000])
此列包含 JSON 个用户成员列表 uid:s。
- mt_group(布尔值)
这一列显示的是一组不是。
数据库行示例:
| mt_mas | mt_mem | mt_group |
| :----: | :----: | :------: |
| 1 | {“1”,“2”} |假 |
好的,解决方案比预期的要简单。 @Gari Singh (https://whosebug.com/users/5529712/gari-singh) 实际上在上面的评论中指出了这一点,但我想我会把它写在这里所以问题注册为已解决。
解决办法就是在计算结果的查询中简单地不排序。所以正确的计数代码应该只是:
res, _ := models.MT(
Where("(mt_mas = ? or mt_mem like ?) and mt_group = ?", uint(uid), `%"`+strconv.Itoa(uid)+`"%`, bool(mt_group_bool)),
).Count(CTX, DB)
然后 运行 查询以获取具有顺序的实际行,如下所示:
res, err := models.MT(
Where("(mt_mas = ? or mt_mem like ?) and mt_group = ?", uint(uid), `%"`+strconv.Itoa(uid)+`"%`, bool(mt_group_bool)),
OrderBy("mt_mas"),
).All(CTX, DB)
感谢您的帮助! :)
我在 Go 上使用 SqlBoiler 将请求发送到 PostgreSQL 数据库,但是当我尝试通过其中一个字段对数据库进行排序时,它 returns 0 行。
起初我运行一个计数(如下详述),如果计数returns大于或等于一行,那么我查询数据库以获取所有结果。
这 returns 正确的行数:
res, _ := models.MT(
Where("(mt_mas = ? or mt_mem like ?) and mt_group = ?", uint(uid), `%"`+strconv.Itoa(uid)+`"%`, bool(mt_group_bool)),
).Count(CTX, DB)
这 returns 没有行,尽管查询参数完全相同:
res, _ := models.MT(
Where("(mt_mas = ? or mt_mem like ?) and mt_group = ?", uint(uid), `%"`+strconv.Itoa(uid)+`"%`, bool(mt_group_bool)),
OrderBy(`mt_mas`),
).Count(CTX, DB)
这是我在检查行数后获取所有行的方式:
res, err := models.MT(
Where("(mt_mas = ? or mt_mem like ?) and mt_group = ?", uint(uid), `%"`+strconv.Itoa(uid)+`"%`, bool(mt_group_bool)),
OrderBy(`mt_mas`),
).All(CTX, DB)
从上面的请求中读取错误时,它打印出 <nil>
并且一切正常。
数据库为Postgres(版本PostgreSQL 13.3),列如下:
- mt_mas(整数)
此列包含此行所有者的 uid。 - mt_mem(字符变化 [1000])
此列包含 JSON 个用户成员列表 uid:s。 - mt_group(布尔值)
这一列显示的是一组不是。
数据库行示例:
| mt_mas | mt_mem | mt_group |
| :----: | :----: | :------: |
| 1 | {“1”,“2”} |假 |
好的,解决方案比预期的要简单。 @Gari Singh (https://whosebug.com/users/5529712/gari-singh) 实际上在上面的评论中指出了这一点,但我想我会把它写在这里所以问题注册为已解决。
解决办法就是在计算结果的查询中简单地不排序。所以正确的计数代码应该只是:
res, _ := models.MT(
Where("(mt_mas = ? or mt_mem like ?) and mt_group = ?", uint(uid), `%"`+strconv.Itoa(uid)+`"%`, bool(mt_group_bool)),
).Count(CTX, DB)
然后 运行 查询以获取具有顺序的实际行,如下所示:
res, err := models.MT(
Where("(mt_mas = ? or mt_mem like ?) and mt_group = ?", uint(uid), `%"`+strconv.Itoa(uid)+`"%`, bool(mt_group_bool)),
OrderBy("mt_mas"),
).All(CTX, DB)
感谢您的帮助! :)