如何实现一种多字段查询场景

场景:前端POST传入一个字段或者多个字段,gin拿到后如何处理区分传入的是什么?然后去数据库查询,如果查找了就返回这个用户的所有数据,(能被查询的字段只有:name,order_id,phone)如:

// 情况1
POST>张三
Rturn—>name:张三,gender:男,age:32,order_id:123456,phone:13888888888
// 场景2
POST>13888888888
Return—>name:张三,gender:男,age:32,order_id:123456,phone:13888888888
// 场景3
POST>13888888888654321
Return—>
name:张三,gender:男,age:32,order_id:123456,phone:13888888888
name:李四,gender:女,age:18,order_id:654321,phone:15555555555

数据库

有三张表user,order,info

user 主表

id name gender age
1 张三 32
2 李四 18

order 分表关联 user.id

id user_id order_id
1 1 123456
2 2 654321

info 分表关联 user.id

id user_id phone
1 1 13888888888
2 2 15555555555

前端

<div class="search-box">
    <form method="post" action="/">
        <input type="text" class="search-txt" name="column" placeholder="查询" />
        <button type="submit" class="search-btn fa fa-search" aria-hidden="true"></button>
    </form>
</div>

后端

func main() {
    // 初始化数据库连接
    config.NewDB()

    // 创建 gin 引擎实例
    router := gin.Default()
    router.LoadHTMLFiles("./static/templates/index.html")
    router.Static("/static", "./static/templates/css")
    router.GET("/", func(c *gin.Context) {
        c.HTML(http.StatusOK, "index.html", gin.H{})
    })
    router.POST("/", func(c *gin.Context) {
        column := c.PostForm("column")
        fmt.Println(column)
        c.HTML(http.StatusOK, "index.html", gin.H{
            "result": column,
        })
    })
    // 启动服务
    err := router.Run()
    if err != nil {
        return
    }
}
sql
讨论数量: 2
一般会明确字段名
场景1,2 通过如下设置实现
如 设置 
查询字段类型   snType 可选类型自定义 name,phone,job
查询字段值   snValue

https://user?snType=name&snValue=xiaowang

sql 大概这样
select u.*,i.* from user u left join info i on u.id=i.user_id  where name = xiaowang

https://user?snType=phone&snValue=12233345876



场景3 属于 条件 或 
// 场景3
POST>13888888888654321
Return>
name:张三,gender:男,age:32,order_id:123456,phone:13888888888
name:李四,gender:女,age:18,order_id:654321,phone:15555555555

需要新增参数
设置参数 order 
设置条件 option  
https://user?snType=realname&snValue=xiaowang&order=654321&option=or

不过一般不会这样使用
一般那是查询 某个用户是否存在某个订单号  
即 
https://user?snType=realname&snValue=xiaowang&order=654321
9个月前 评论

可以通过正则表达式,判断用户输入的类型,一般手机号固定是11位,订单号是数字,其它就是名字之类的规则,然后再根据判断的类型,对应的sql语句就可以了

9个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!