使用散列值的FIND_IN_SET我的sql函数

时间:2014-04-17 14:12:54

标签: mysql sql find-in-set

我有以下查询:

SELECT url, url_hash from pages WHERE url_hash IN (SHA1('URL1'), SHA1('URL2'), SHA1('URL3'))
ORDER BY FIND_IN_SET(url_hash, "SHA1('URL1'), SHA1('URL2'), SHA1('URL3')")

我会保持结果集的顺序与IN子句中参数的顺序相同。

我发现了SO question

问题是mysql不知道如何解释一组SHA1函数,如果我把它们作为字符串传递,它们没有被正确评估,如果我传给它们一个表达式(没有引号)我得到以下错误:

OperationalError: (1582, "Incorrect parameter count in the call to native function 'FIND_IN_SET'")

1 个答案:

答案 0 :(得分:4)

我认为您要使用field()而不是find_in_set()

SELECT url, url_hash
from pages 
WHERE url_hash IN (SHA1('URL1'), SHA1('URL2'), SHA1('URL3'))
ORDER BY field(url_hash, SHA1('URL1'), SHA1('URL2'), SHA1('URL3'));