我創建一個存儲過程,我傳遞到其中「秩序」動態,像這樣:MySQL的存儲過程的動態順序與混合型
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。等
是否有使用混合數據類型動態排序,並仍然以正確的順序返回整型,日期時間等
情況下,使用只在表達,不是嗎?所以這應該是一系列「IF ... ELSE IF ...」,我想。 –
這些是不同的CASE語句。我用這一個 - http://dev.mysql.com/doc/refman/5.1/en/case-statement.html。 – Devart
不知道那一個,感謝啓發。 –