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自定义函数使用数组和排序可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

SQL自定义函数返回记录

创建自定义 MySQL 排序规则

使用自定义谓词对 numpy 数组进行排序

python第十四课--排序及自定义函数

使用自定义函数对数组进行排序[重复]

php多维数组自定义排序 uasort()