2012-04-17 35 views
0

我堅持FIND_IN_SET功能MYSQL 5.5,例如:取消排序結果在MySQL

請檢查下面的查詢,考慮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 ; 
+1

從來沒有見過'find_in_set'用在where子句之前?!?!它只是返回第二個參數中的第一個參數的索引...你沒有把它與任何東西進行比較?!?! – ManseUK 2012-04-17 14:19:28

回答

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返回第二個參數中第一個參數的索引 - 所以我很surpri sed你的查詢甚至可以工作.....

+0

謝謝ManseUK,你解決了我的問題 – 2012-04-17 14:49:38

+0

ManseUK感謝您的回覆,簡單的疑問,我如何在「u.user_id IN(10,9,5,8)中動態地傳遞(10,9,5,8,21) 21)「 其中as('10,9,5,8,21')是」FIND_IN_SET(u.user_id,'10,9,5,8,21')「中的varchar,請幫助 – 2012-04-17 15:08:45

+0

@RajneelJoshi是存儲在數組中的值?你可以在你用來創建這個查詢的問題中包含PHP嗎? – ManseUK 2012-04-17 15:11:32