0

我被FIND_IN_SETMYSQL 5.5 中的函数卡住了,例如:

请检查以下查询,考虑10,9,5,8,21是用户 ID

SELECT u.user_id,u.first_name,u.last_name
FROM user u 
WHERE 
u.is_active = 'Y'       
AND FIND_IN_SET(u.user_id,'10,9,5,8,21');

当我触发此查询时,它会给我结果中的用户 ID 的升序

5
8
9
10
21

我想要和我输入的顺序一样

10
9
5
8
21

有没有办法实现它?

存储过程

DROP PROCEDURE IF EXISTS databaseName.procName;
DELIMITER //
CREATE PROCEDURE databaseName.procName(IN ZoneIDs LONGTEXT)

BEGIN       
        SELECT u.user_id,u.first_name,u.last_name

        FROM user u     
        WHERE u.is_active = 'Y'
        AND FIND_IN_SET(u.user_id,ZoneIDs); 

END //
DELIMITER ;
4

1 回答 1

1

尝试像这样使用它:

SELECT u.user_id,u.first_name,u.last_name
FROM user u 
WHERE u.is_active = 'Y' and u.user_id IN (10,9,5,8,21)
ORDER BY FIND_IN_SET(u.user_id,'10,9,5,8,21');

这用于IN仅选择u.userid该列表中的数据,然后使用您的特定订单进行排序find_in_set

FIND_IN_SET在第二个参数中返回第一个参数的索引 - 所以我很惊讶你的查询甚至工作......

于 2012-04-17T14:21:40.903 回答