今天有点临时需求要计算一张表的结果,不想写代码,想到了mysql的自定义函数。碰到了很多问题,为了方便一下使用,在此记录一下。
需求:一张表中,有比分,需要查询出比赛id和比赛结果。
分析:
单表查询没啥的,困难就困难在怎么判断比分之后返回想要的结果。
这里我把比赛结果分别定义代号,1主场胜、2平局、3客场胜
函数逻辑:
接收两个参数,判断参数的大小,分别返回结果。
实现:
Navicat操作:
navicat for mysql 工具内--创建函数
![Mysql的函数使用方法 Mysql的函数使用方法](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMWhaMlZ6TWpBeE5TNWpibUpzYjJkekxtTnZiUzlpYkc5bkx6WXhNVGd4TlM4eU1ERTJNREV2TmpFeE9ERTFMVEl3TVRZd01URTRNakV4T1RBM01Ea3pMVEV6T0RBM016UTNOall1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
这里分别是存储过程和函数,我们选择函数
![Mysql的函数使用方法 Mysql的函数使用方法](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMWhaMlZ6TWpBeE5TNWpibUpzYjJkekxtTnZiUzlpYkc5bkx6WXhNVGd4TlM4eU1ERTJNREV2TmpFeE9ERTFMVEl3TVRZd01URTRNakV4T1RBM05Ua3pMVEUwTnpFek1EZzFNek11Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
设置参数,这里的参数是接收的参数,例如 count(id) 接收一个参数
![Mysql的函数使用方法 Mysql的函数使用方法](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMWhaMlZ6TWpBeE5TNWpibUpzYjJkekxtTnZiUzlpYkc5bkx6WXhNVGd4TlM4eU1ERTJNREV2TmpFeE9ERTFMVEl3TVRZd01URTRNakV4T1RBNE1qZ3hMVEUzT0Rrek1qUXdPRFl1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
下一步,设置返回类型
![Mysql的函数使用方法 Mysql的函数使用方法](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMWhaMlZ6TWpBeE5TNWpibUpzYjJkekxtTnZiUzlpYkc5bkx6WXhNVGd4TlM4eU1ERTJNREV2TmpFeE9ERTFMVEl3TVRZd01URTRNakV4T1RBNE56azNMVEUyTXpjM01EWTFOVFl1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
点击完成即可。会出现以下界面
![Mysql的函数使用方法 Mysql的函数使用方法](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMWhaMlZ6TWpBeE5TNWpibUpzYjJkekxtTnZiUzlpYkc5bkx6WXhNVGd4TlM4eU1ERTJNREV2TmpFeE9ERTFMVEl3TVRZd01URTRNakV4T1RBNU5UQXdMVFF6TkRZek5ERTNNeTV3Ym1jPS5qcGc%3D.jpg?w=700&webp=1)
现在开始在BEGIN ..END;;中间写逻辑,具体语法需要百度。
我这里主要是if...elseif..else的逻辑,代码如下:
![Mysql的函数使用方法 Mysql的函数使用方法](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMWhaMlZ6TWpBeE5TNWpibUpzYjJkekxtTnZiUzlpYkc5bkx6WXhNVGd4TlM4eU1ERTJNREV2TmpFeE9ERTFMVEl3TVRZd01URTRNakV4T1RBNU9EVTVMVEV3T1RBM01qSTNORFF1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
保存--getMatchResult。如果语法有错误,保存会报错,根据提示信息去查找错误。
![Mysql的函数使用方法 Mysql的函数使用方法](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMWhaMlZ6TWpBeE5TNWpibUpzYjJkekxtTnZiUzlpYkc5bkx6WXhNVGd4TlM4eU1ERTJNREV2TmpFeE9ERTFMVEl3TVRZd01URTRNakV4T1RFd01qTTBMVEl3TURRNE9EVXhOalF1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
使用函数:
我这里为了方便,直接写了两个参数,结果跟预想一样。 第一个参数是主场分数,第二个参数是客场分数,3表示客场胜。
![Mysql的函数使用方法 Mysql的函数使用方法](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMWhaMlZ6TWpBeE5TNWpibUpzYjJkekxtTnZiUzlpYkc5bkx6WXhNVGd4TlM4eU1ERTJNREV2TmpFeE9ERTFMVEl3TVRZd01URTRNakV4T1RFd05qZzNMVFl6TVRFME9EWXlOQzV3Ym1jPS5qcGc%3D.jpg?w=700&webp=1)
![Mysql的函数使用方法 Mysql的函数使用方法](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMWhaMlZ6TWpBeE5TNWpibUpzYjJkekxtTnZiUzlpYkc5bkx6WXhNVGd4TlM4eU1ERTJNREV2TmpFeE9ERTFMVEl3TVRZd01URTRNakV4T1RFeE1EYzRMVFF3TmpNNE16WTNNeTV3Ym1jPS5qcGc%3D.jpg?w=700&webp=1)
Mysql 创建函数
进入mysql shell,因为中间有很多分号,所以需要使用delimiter分界。该命令表示,把默认的分号执行改成其他符号执行。
![Mysql的函数使用方法 Mysql的函数使用方法](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMWhaMlZ6TWpBeE5TNWpibUpzYjJkekxtTnZiUzlpYkc5bkx6WXhNVGd4TlM4eU1ERTJNREV2TmpFeE9ERTFMVEl3TVRZd01URTRNakV4T1RFeE5EZzBMVE0wTXpjMU9ERXdPQzV3Ym1jPS5qcGc%3D.jpg?w=700&webp=1)
这里使用demiter修改分解符为// ,如果还是使用分号分界则报错了。使用//分界执行后,显示正常。
创建函数(注意使用//分界)
![Mysql的函数使用方法 Mysql的函数使用方法](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMWhaMlZ6TWpBeE5TNWpibUpzYjJkekxtTnZiUzlpYkc5bkx6WXhNVGd4TlM4eU1ERTJNREV2TmpFeE9ERTFMVEl3TVRZd01URTRNakV4T1RFeE9UTTNMVEU0TkRBM05qY3dPVFl1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
使用函数
分号结尾没效果,必须要用// ,除非退出mysql shell重新登录。返回结果是我们需要的,第2个参数为客场。3表示客场胜。
![Mysql的函数使用方法 Mysql的函数使用方法](https://image.shishitao.com:8440/aHR0cHM6Ly9iYnNtYXguaWthZmFuLmNvbS9zdGF0aWMvTDNCeWIzaDVMMmgwZEhBdmFXMWhaMlZ6TWpBeE5TNWpibUpzYjJkekxtTnZiUzlpYkc5bkx6WXhNVGd4TlM4eU1ERTJNREV2TmpFeE9ERTFMVEl3TVRZd01URTRNakV4T1RFeU5qUXdMVEUwT0RZeU56RTNOVGd1Y0c1bi5qcGc%3D.jpg?w=700&webp=1)
到此简单试用完成,临时查询很方便。