我在MySQL中有一个函数,需要在查询中运行约50次(而不是设置值)。输入当前存储在一个数组中,例如
[1,2,3,4,5,6,7,8,9,10]
单独执行MySQL查询时,它可以正常工作,请参见下文
column_name
表示要为其获取数据的列,在这种情况下,它是数据库中的DOUBLE
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()
,(请参见MOD()
函数的值2),其中输出少于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
.....
(标题可能写错了,我不太确定你还会怎么解释我在这里要做的事情)
答案 0 :(得分:2)
使用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;
如果要将结果作为列,则可以在以后使用条件聚合。