我被 MYSQL 5.5 中的 FIND_IN_SET
函数困住了,例如:
请检查以下查询,考虑到 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 ;
最佳答案
尝试像这样使用它:
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返回第二个参数中第一个参数的索引 - 所以我很惊讶你的查询甚至有效......
关于php - mysql中的未排序结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10192952/