看板 Database 關於我們 聯絡資訊
現有一個留言板資料表board結構如下 id(int) rid(int) time(timestamp) title(char) text(text) 其中id是auto_increment主鍵,代表每篇留言的唯一編號 rid可為NULL,若為NULL,則代表此篇留言為有標題的留言 若有,則代表此篇留言為某特定標題底下的留言,標題為id為rid的title 範例如下 id rid time title    text 1 NULL T 標題一   這是標題一的發起留言 2  1 T+1 NULL    這是標題一之下的比較舊回覆留言 3  NULL  T+2  標題二   這是標題二的發起留言 4  1    T+3  NULL    這是標題一之下的最新留言 5 NULL  T+4  標題三   這是標題三的發起留言 6  NULL  T+5  標題四   這是第四個標題 留言板在顯示時會分頁 每頁會顯示三個標題與標題底下的所有留言,且越新的留言會在越前面 每個標題的新舊程度以回覆其標題下的最新留言為準 但標題留言應在同一標題的最上方 也就是說,希望透過SQL語法抓出以下表格 第一頁要顯示的留言 id rid time title    text 6  NULL  T+5  標題四   這是第四個標題 5 NULL  T+4  標題三   這是標題三的發起留言 1 NULL T 標題一   這是標題一的發起留言 4  1    T+3  NULL    這是標題一之下的最新留言 2  1 T+1 NULL    這是標題一之下的比較舊回覆留言 目前我是使用以下語法 SELECT * FROM (  SELECT DISTINCT `tID` FROM (   SELECT IFNULL(`rid`,`id`) AS `tID`,`time` FROM `board` ORDER BY `time` DESC ) AS `T1` LIMIT 3 ) AS `T2`,`board` WHERE `T2`.`tID`=`board`.`id` OR `T2`.`tID`=board`.`rid` ORDER BY `board`.`time` DESC 之後再用php語法檢查其其id一一填入陣列再顯示 其中光是SELECT就有三次....orz 希望請教高手有沒有比較不吃資源、最好能不依靠PHP做額外處理的方法.... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.170.58.115
danielguo:把"標題"拉出來建一個表應該會比較容易, 管理也簡單 05/31 02:12
mrbigmouth:是比較簡單沒錯 但希望能不改動現有結構.... 05/31 05:56