2010-10-21 33 views

回答

10

可以使用FIELD()做到這一點:

SELECT ... ORDER BY FIELD(`test`.`id`, 562, 553, 572) 
2

ORDER BY CASE test.id WHEN 562 THEN 0 WHEN 553 THEN 1 WHEN 572 THEN 2 END

2

一種方法是這樣的:

SELECT * 
    FROM test JOIN test2 ON test.id=test2.id 
WHERE test.id IN (562,553,572) 
ORDER BY CASE test.id 
      WHEN 562 THEN 1 
      WHEN 553 THEN 2 
      WHEN 572 THEN 3 
      ELSE   4 
      END; 

你不需要GROUP BY,除非你是計算總量。 ELSE子句在這裏是多餘的,但包含它通常是一個好主意。

+0

如何不同,這從'FIELD'功能是什麼? SQL標準? – Nirmal 2010-10-21 06:38:28

+0

@Nirmal:是的 - 我不知道哪個DBMS支持FIELD功能(但它當然不是全部); OTOH,我不知道不支持CASE的DBMS。 – 2010-10-21 13:31:48

2

能做點什麼FIND_IN_SET():

SELECT * 
    FROM test 
    JOIN test2 
    ON test.id = test2.id 
    WHERE test.id IN (562,553,572) 
    ORDER BY FIND_IN_SET(test.id, '562,553,572'); 
+0

謝謝先生:-) – learner 2010-10-21 07:50:19