一般的 WordPress 軟體安裝時,只能架設一個 Blog (但允許多個作者),WordPress MU (Multi-Blogs, 又稱 WPMU ) 則可以讓每個人擁有一個 Blog,也容許每個人擁有自己的子網域名稱 (subdomain)。但是,WordPress MU 更改了單人版 WordPress 的資料庫架構,在新增一個新的 Blog 時,於 database 上面會產生該 Blog 自己的一組 tables。每新增一個 Blog,database 裡面就會產生 9 個新的 tables。

據 WPMU 發展團隊表示,雖然這表示 1000 個 Blog 將會產生 1000×9 = 9000 個 tables,但對於資料存取效率而言,應該是最好的。只是,這也讓一般 WordPress 上容易做到的一些動作,在 WPMU 上面要稍微修改或大幅修改。

例如,一般 WordPress 上如果要顯示最近發表的  10 篇文章 (post),只要搜尋一個儲存文章的 table: wp_posts  即可。但在 WPMU 上面,如果已經有 1000 個 Blogs 存在,則最基本的作法是必須去搜尋 1000 個 Blog 各自的 post tables,再將最後結果彙整。另外,由於 WordPress 及 WPMU 都有文章修改版本儲存的功能,這在列出最近發表文章的時候,也增加了搜尋上的複雜度。

目前在 WPMU 發展網站上找到的作法,第一種是上段所提到的笨方法(每一個 Blog 的 table 都需搜尋),第二種方法,則是先查詢 wp_blogs 這個 table,將所有 blog 的更新時間反向排序(最近到之前),然後只要去查那些更新時間比較近的 blog 之 tables 即可。但第二種方法也有缺點:所謂一個 Blog 有更新,未必是代表有新的文章發表,有時候僅僅是因為作者「修改」了某篇文章。所以第二種方法會帶來一個困擾:就算我在 1 個月前發表了一篇文章,只要我在最近幾個小時稍微修改一兩個字,則這個 Blog 也會被認為「有更新」。如果是想用第二種方法來讓每個人的 Blog 文章有公平的曝光機會,則只要一些人稍動手腳,一篇文章在首頁的曝光版面,可以隨時跳到最前面。

於是,我們需要第三種方法,這也是 SkyCity Blog 所用的方法:在 database 上面新增加一個 table,凡是各個 blog 有「發表」(非「編輯」或「更新」)一篇新的部落格文章時,就把這篇文章的相關編號、所屬部落格編號、以及發表時間,紀錄在這個新的 table 上面。這時候,若要顯示所有部落格最近更新的 N 篇文章時,只要去查詢這個新的 table 即可。

我花了好幾天在 WPMU 網站上面抓了一堆老外寫的 Recent Posts 模組,結果都是用第一種方法或第二種方法作出來的,結果也讓人不滿意。所以,只好自己動手修改程式,新增 tables,把第三種方法作出來。

過陣子等我有空,再將修改的結果提報到 WordPress MU 總站,讓其他人分享。

所謂的有貢獻的人,通常都不是天才,或特別熱心的人,而是實在是因為都沒有別人要作,所以只好自己動手作。這個世界上,有許多專業上的貢獻,也通常不是該領域的專業人士所提出來的,往往是非專業吃飽太閒的人看不慣動手去作的結果。範例之一,就是 Linux 作業系統 X 視窗介面的中文輸入部分,居然不是什麼資工系或電腦系的專家、學者、程式工程師寫出來的,而是一個某校物理研究所的學生。

註:一個資料庫的 table 類似 MS Excel 的矩陣形式試算表表格的樣子。直行(column) 儲存每個 Object的變數(如文章標題、文章作者、內容、。。。),一個橫列 (row) 則代表一個 Object (人、文章、物品、。。。)