Это может быть не очень аккуратно, но вы можете сделать следующее:
SELECT *
FROM cms_product
WHERE id IN (3, 22, 1)
ORDER BY id = 3 DESC, id = 22 DESC, id = 1 DESC;
Контрольный пример:
CREATE TABLE cms_product (id int, value int);
INSERT INTO cms_product VALUES (1, 100);
INSERT INTO cms_product VALUES (3, 200);
INSERT INTO cms_product VALUES (22, 300);
Результат:
+------+-------+
| id | value |
+------+-------+
| 3 | 200 |
| 22 | 300 |
| 1 | 100 |
+------+-------+
3 rows in set (0.02 sec)
UPDATE:
... ORDER BY FIELD (id, 3, 22, 1)
, как предложено @ Dave и @ OMG Ponies , возвращает те же результаты и на самом деле намного аккуратнее.