MySQL пользовательская функция с использованием массивов и сортировки возможно? - PullRequest
0 голосов
/ 17 декабря 2018

Хотя кажется, что я не могу получить удовлетворительные ответы по моему последнему вопросу, опубликованному здесь , сейчас я пытаюсь завершить свой проект с использованием 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-е наименьшее на 3, а затем наибольшее на 4, независимо от того, есть ли связи или нет.Могу ли я сделать это так же, как пользовательскую функцию MySQL, и если нет, то какой самый чистый способ, не делая хитрости, например логику быстрой сортировки с использованием циклов for-next и т. д.?

Если PHP может обрабатыватьрегистрировать такие пользовательские функции, как это можно с SQLite, что было бы лучше на самом деле, но как?

1 Ответ

0 голосов
/ 17 декабря 2018

Зачем использовать sort ()?Просто напишите алгоритм быстрой сортировки всего 4 цифры.В качестве альтернативы вы можете сделать это в PHP (я предполагаю, что вы подключаете PHP к MYSQL).

Нет причин не

SELECT * FROM table; //Perform Calculation UPDATE table SET x = y WHERE something;

Brute Force может быть:

$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;

...