我有這樣如何訂購與WHERE條件中指定的ID相同的查詢結果?
SELECT *
FROM test JOIN test2 ON test.id=test2.id
WHERE test.id IN (562,553,572)
GROUP BY test.id
其結果是有序的這樣的查詢:553,562,572 ...
但我需要,我在IN(562,553,572)
條件中指定的順序相同。
我有這樣如何訂購與WHERE條件中指定的ID相同的查詢結果?
SELECT *
FROM test JOIN test2 ON test.id=test2.id
WHERE test.id IN (562,553,572)
GROUP BY test.id
其結果是有序的這樣的查詢:553,562,572 ...
但我需要,我在IN(562,553,572)
條件中指定的順序相同。
可以使用FIELD()
做到這一點:
SELECT ... ORDER BY FIELD(`test`.`id`, 562, 553, 572)
ORDER BY CASE test.id WHEN 562 THEN 0 WHEN 553 THEN 1 WHEN 572 THEN 2 END
一種方法是這樣的:
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子句在這裏是多餘的,但包含它通常是一個好主意。
能做點什麼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');
謝謝先生:-) – learner 2010-10-21 07:50:19
如何不同,這從'FIELD'功能是什麼? SQL標準? – Nirmal 2010-10-21 06:38:28
@Nirmal:是的 - 我不知道哪個DBMS支持FIELD功能(但它當然不是全部); OTOH,我不知道不支持CASE的DBMS。 – 2010-10-21 13:31:48