我試圖查詢Wordpress數據庫,並獲得帖子標題以正確的順序排序。 標題的格式如下:標題1,標題2 ..我需要按升序對它們進行排序,我該怎麼做?如果我只是對它們進行排序上升,他們就會出來,如:1,10,11 ...用MySQL自然排序嗎?
現在我的ORDER BY語句是這樣的,但它什麼都不做:
ORDER BY CONVERT(p.post_title,SIGNED) ASC;
我試圖查詢Wordpress數據庫,並獲得帖子標題以正確的順序排序。 標題的格式如下:標題1,標題2 ..我需要按升序對它們進行排序,我該怎麼做?如果我只是對它們進行排序上升,他們就會出來,如:1,10,11 ...用MySQL自然排序嗎?
現在我的ORDER BY語句是這樣的,但它什麼都不做:
ORDER BY CONVERT(p.post_title,SIGNED) ASC;
如果#總是在就像你可以做一些字符串操作結束,使其工作:
SELECT *, CAST(RIGHT(p.post_title,2) AS UNSIGNED) AS TITLE_INDEX
FROM wp_posts p
ORDER BY TITLE_INDEX asc
可能要調整它有點假設你可能有100+或者1000+編號爲好。
每行函數在任何想要很好地擴展的數據庫中都是一個壞主意。那是因爲他們必須執行的計算,每行你每次檢索你做了select
。
智能DBA的做法是創建一個包含計算排序鍵的全新列,並使用插入/更新觸發器來確保正確設置。這意味着只有在需要時才進行計算,並在所有選擇中攤銷其成本。
這是少數幾種可以從第三範式恢復的情況之一,因爲使用觸發器可防止數據不一致。幾乎沒有人抱怨數據庫佔用的磁盤空間,絕大多數問題都與速度有關。
而且,通過使用此方法並索引新列,您的查詢將絕對尖叫。
因此,基本上,你創建一個名爲natural_title
映射的另一列如下:
title natural_title
----- -------------
title 1 title 00001
title 2 title 00002
title 10 title 00010
title 1024 title 01024
確保在觸發使用的映射功能可以讓用戶允許的最大值。然後你使用如下查詢:
select title from articles
order by natural_title asc
我聽說你有關每行功能,但它是Wordpress。很可能該表的方式少於10000行。另外,在升級時,向Wordpress表格添加字段將會中斷。一個可能的解決方案是創建一個帶有post_id和natural_title的單獨表格並加入和排序。 – brendan 2010-06-22 14:26:48