Рекурсивно работает функция MySQL - PullRequest
0 голосов
/ 02 октября 2018

У меня есть функция в MySQL, которую нужно выполнить около 50 раз (не заданное значение) в запросе.входные данные в настоящее время хранятся в массиве, таком как [1,2,3,4,5,6,7,8,9,10]

, при индивидуальном выполнении запроса MySQL он работает нормально, см. ниже

column_name обозначает столбец, для которого он получает данные,в данном случае это ДВОЙНОЙ в базе данных

Второе значение в функции MOD() - это ввод, который я поставляю MySQL из вышеупомянутого массива

SELECT id, MOD(column_name, 4) AS mod_output
FROM table
HAVING mod_output > 10

Для достижения выводаМне требуется * следующий код работает

SELECT id, MOD(column_name, 4) AS mod_output1, MOD(column_name, 5) AS mod_output2, MOD(column_name, 6) AS mod_output3
FROM table
HAVING mod_output1 > 10 AND mod_output2 > 10 AND mod_output3 > 10

Однако это, очевидно, очень грязно, и когда не 3 входа, а более 50, это станет очень неэффективным.

Appart от вызова по50 отдельных запросов, есть ли лучший способ получить такой же (см. Ниже) вывод?

В сущности, мне нужно предоставить MySQL список значений и запустить его MOD() над всеми из них в указанном столбце.

Единственные данные, которые мне нужно вернуть, это id строк, которые соответствуют выводу функций MOD() с указанным значением inpu.t (см. значение 2 функции MOD()), где выходное значение меньше 10

Обратите внимание, что MOD() была использована в качестве примера функции, однако, требуемая конечная функция * должна* капля замены

пример макета таблицы

id | column_name
1  | 0.234977
2  | 0.957739
3  | 2.499387
4  | 48.395777
5  | 9.943782
6  | -39.234894
7  | 23.49859
.....

(Название может быть неверно сформулировано, я не совсем уверен, как иначе вы бы объяснили, что яя пытаюсь сделать здесь)

1 Ответ

0 голосов
/ 02 октября 2018

Используйте join и производную таблицу или временную таблицу:

SELECT n.n, t.id, MOD(t.column_name, n.n) AS mod_output
FROM table t CROSS JOIN
     (SELECT 4 as n UNION ALL SELECT 5 UNION ALL SELECT 6 . . .
     ) n
WHERE MOD(t.column_name, n.n) > 10;

Если вы хотите, чтобы результаты были представлены в виде столбцов, вы можете использовать условное агрегирование впоследствии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...