Использовать FIND_IN_SET мою функцию sql с хэшированными значениями

У меня есть следующий запрос:

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.

Я нашел этот ТАК вопрос.

Проблема в том, что mysql не знает, как интерпретировать набор функций SHA1, если я передаю их как строки, они не оцениваются правильно, и если я передаю им выражение (без кавычек), я получаю следующую ошибку:

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

1 ответ

Решение

Я думаю, что вы хотите использовать 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'));
Другие вопросы по тегам