2010-06-21 38 views
0

我試圖查詢Wordpress數據庫,並獲得帖子標題以正確的順序排序。 標題的格式如下:標題1,標題2 ..我需要按升序對它們進行排序,我該怎麼做?如果我只是對它們進行排序上升,他們就會出來,如:1,10,11 ...用MySQL自然排序嗎?

現在我的ORDER BY語句是這樣的,但它什麼都不做:

ORDER BY CONVERT(p.post_title,SIGNED) ASC; 

回答

0

如果#總是在就像你可以做一些字符串操作結束,使其工作:

SELECT *, CAST(RIGHT(p.post_title,2) AS UNSIGNED) AS TITLE_INDEX 
FROM wp_posts p 
ORDER BY TITLE_INDEX asc 

可能要調整它有點假設你可能有100+或者1000+編號爲好。

2

每行函數在任何想要很好地擴展的數據庫中都是一個壞主意。那是因爲他們必須執行的計算,每行你每次檢索你做了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 
+0

我聽說你有關每行功能,但它是Wordpress。很可能該表的方式少於10000行。另外,在升級時,向Wordpress表格添加字段將會中斷。一個可能的解決方案是創建一個帶有post_id和natural_title的單獨表格並加入和排序。 – brendan 2010-06-22 14:26:48