2016-12-24 78 views
0

我有一个MySQL的功能定义上表中的行排序,给出主键MySQL可以通过比较函数来排序吗?

CREATE FUNCTION CmpRows (a INT, b INT) 
BEGIN 
    IF ((SELECT foo FROM Bar WHERE id=a) etc...) 
    THEN 
     RETURN -1; 
    ELSEIF (other stuff) 
    THEN 
     RETURN 1; 
    ELSE 
     RETURN 0; 
    END IF; 
END 

我可以使MySQL使用此功能ORDER BY结果集?

+0

是的,它应该工作。你尝试过使用这个吗? –

+0

@TimBiegeleisen我不知道'SELECT ... ORDER BY CmpRows(???,???)'语境中的语法是什么' - 我如何告诉它使用主键来代替参数呢? – spraff

回答

0

声明此功能是确定

CREATE DETERMINISTIC FUNCTION ... 

而且,当你声明它是不会说谎的。确保它确实是确定性的。也就是说,确保每次输入相同的结果都是一样的。

然后它应该工作。

+0

如果参数指向的行在调用之间可以更改,函数是否仍然是确定性的? – spraff

+0

不,一个函数不是确定性的,如果在给定相同参数的情况下结果会发生变化的话。您可能想要考虑采用不同的方法来订购结果集;这一个,如果你能得到它的工作,可能会产生令人惊讶的结果,当你不想感到惊讶。 –

+0

所以,如果它不是确定性的,我选择... ORDER BY CmpRows'然后改变一些行,然后SELECT ... ORDER BY CmpRows',那么第二次的顺序可能与第一次的顺序相同时间轮,或类似的东西? – spraff