Можно ли это сделать в MySQL, так как я полагаю, это будет быстрее?
Только если вы разрешите MySQL использовать индекс
Вы можете создать временную таблицу:
$query = "CREATE TABLE IF NOT EXISTS test (
sort INT NOT NULL AUTO_INCREMENT,
`type` VARCHAR(20) NOT NULL,
PRIMARY KEY (sort),
KEY (`type`, sort)
ENGINE=MEMORY (SELECT 1,'other' <<-- see query below.
UNION SELECT 2,'type1' <<-- build this part using
UNION SELECT 3,'type2' <<-- Marc B's code.
UNION SELECT 4,'type3'
UNION SELECT 5,'type4'
UNION SELECT 6,'type5'
UNION SELECT 7,'type6' ";
Запустите этот запрос.
Теперь вы можете связать этот запрос с помощью объединения и использовать test.sort в качестве ключа сортировки:
SELECT t1.id, t1.article_id, COALESCE(t.`type`,'other') as sort_type
FROM table1 t1
LEFT JOIN test t ON (t1.`type` = t.`type`)
WHERE ....
ORDER BY t.sort;
Этот запрос будет полностью проиндексирован и будет выполнен как можно быстрее.