MySQL自定义函数使用数组和排序可能吗?
Posted
技术标签:
【中文标题】MySQL自定义函数使用数组和排序可能吗?【英文标题】:MySQL custom function using arrays and sorting possible? 【发布时间】:2018-12-17 04:10:28 【问题描述】:虽然对于我在here 发布的最后一个问题,我似乎无法得到任何令人满意的答案,但我现在希望在一个简单的 localhost 环境中使用 mysql 而不是 SQLite 作为我的数据库背景来完成我的项目。我需要完成的一件事是使用用户定义函数 (UDF),php 可以使用 SQLite 在 UPDATE 查询中使用以下代码很好地处理该函数:
function nPoints($n1, $n2, $n3, $n4)
$numb = array($n1, $n2, $n3, $n4);
sort($numb);
return $numb[0] * 1 + $numb[1] * 2 + $numb[2] * 3 + $numb[3] * 4;
基本上,我将取 4 个数字并进行计算,将最小的数字乘以 1,然后将下一个最小的数字乘以 2,将第三小的数字乘以 3,然后将最大的数字乘以 4,无论是否存在平局。我可以像 MySQL 用户定义的函数一样执行此操作吗?如果不是,那么什么是最干净的方法,而不是使用更棘手的方法(例如使用 for-next 循环等进行快速排序逻辑)?
如果 PHP 可以像使用 SQLite 一样处理注册此类用户定义的函数,那实际上会更好,但如何呢?
【问题讨论】:
【参考方案1】:为什么要使用 sort()?只需编写一个快速排序算法,它只有 4 个数字。 或者,您可以在 PHP 中执行此操作(我假设您正在将 PHP 连接到 MYSQL)。
没有理由不去
SELECT * FROM table;
//Perform Calculation
UPDATE table SET x = y WHERE something;
蛮力可以是:
$max = $N1 + $N2*2 + $N3*3 + N4*4;
IF ($max < $N1 + $N2*2 + $N4*3 + N3*4) THEN
$max = $N1 + $N2*2 + $N4*3 + N3*4
END IF
...
...
...
return $max;
【讨论】:
我会选择 Eugene Lorman 提供的 PHP 解决方案,从长远来看它更容易维护。 对不起,我迷路了。 1. 所以在 MySQL 函数中,我不能使用数组和排序函数来简化我需要完成的工作,而是采用旧的方式做事? 2. 我可以像原来那样使用 PHP 来实现所需的 MySQL 功能吗?如果是,那怎么办? 我想作为最后一分钟的手段,我可以遵循 [this example] (***.com/questions/25070577/…)。以上是关于MySQL自定义函数使用数组和排序可能吗?的主要内容,如果未能解决你的问题,请参考以下文章