Я создаю хранимую процедуру, в которую я передаю «заказ» динамически, например:
CREATE PROCEDURE `getStuff`(IN orderSQL VARCHAR(100))
BEGIN
SELECT id, name, createdate
FROM mytable
ORDER BY
CASE WHEN orderSQL='id_desc' THEN CONCAT(id, '') END DESC,
CASE WHEN orderSQL='id_asc' THEN CONCAT(id, '') END ASC,
CASE WHEN orderSQL='name_desc' THEN name END DESC,
CASE WHEN orderSQL='name_asc' THEN name END ASC,
CASE WHEN orderSQL='date_desc' THEN CONCAT(createdate, '') END DESC,
CASE WHEN orderSQL='date_asc' THEN CONCAT(createdate, '') END ASC
END
Как вы можете видеть, я конвертирую все поля, не относящиеся к VARCHAR, в VARCHAR, используя CONCAT, потому что смешивание возможных типов заказов не работает, как описано здесь http://www.4guysfromrolla.com/webtech/010704-1.shtml.
Моя проблема в том, что теперь упорядочивание по имени работает, но не строковые порядки возвращаются как 1,10,11,2,3,4,5,6,7,8,9. и т.д.
Есть ли способ использовать смешанное динамическое упорядочение типов данных и при этом возвращать в правильном порядке для целых чисел, даты и т. Д.