计数不正确 SELECT count(*) FROM `managements` WHERE (name LIKE '%第三方%' OR responsible_unit LIKE '%某某公司%') AND `managements`.`deleted_at` IS NULL
时间: 2023-11-21 14:38:31 浏览: 121
Stock-Managements:APUS Digital教练项目第一阶段完成的AngularJS项目
根据你提供的 SQL 查询语句,计数不正确的问题可能出现在两个方面。
首先,确保你使用的 GORM 版本是最新的,并且你的数据库驱动也是兼容的。某些旧版本的 GORM 可能存在计数相关的问题,因此更新到最新版本可能会解决这个问题。
其次,检查你的查询条件是否正确,并与预期结果一致。在你提供的 SQL 查询语句中,使用了 `LIKE` 条件进行模糊匹配,并且包含了 OR 条件和 IS NULL 条件。请确保你的查询条件和预期结果一致,以及数据库中的数据是否满足这些条件。
另外,使用 GORM 进行条件查询时,应该注意链式调用的顺序。正确的链式调用顺序应该是先调用 `Model` 方法指定要查询的模型,然后使用 `Where` 方法设置查询条件,最后调用 `Count` 方法计算记录数。
下面是一个示例代码,演示如何使用 GORM 来进行条件查询和计数:
```go
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type Management struct {
ID uint
Name string
ResponsibleUnit string
DeletedAt gorm.DeletedAt `gorm:"index"`
}
func main() {
dsn := "user:password@tcp(127.0.0.1:3306)/db_name?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println("连接数据库失败:", err)
return
}
var count int64
name := "第三方"
unit := "某某公司"
db.Model(&Management{}).
Where("name LIKE ? OR responsible_unit LIKE ?", "%"+name+"%", "%"+unit+"%").
Where("deleted_at IS NULL").
Count(&count)
fmt.Println("匹配记录数:", count)
}
```
在上面的示例中,我们使用 `Model` 方法指定要查询的模型为 `Management`,然后使用 `Where` 方法设置查询条件,包括 `LIKE` 条件、OR 条件和 IS NULL 条件。最后使用 `Count` 方法来计算符合条件的记录数,并将结果存储在 `count` 变量中。
确保你根据实际情况修改示例代码中的数据库连接信息,并根据你的查询条件调整 `name` 和 `unit` 的取值。通过这种方式,你可以正确计算符合条件的记录数。
阅读全文