討論區的排序想以回覆時間做排序!

我是用PHP寫的

討論區由兩個資料庫寫成

主題資料庫一個

topic_id

head -----標題

content -----內容

time ----發表時間

回覆文章一個資料庫

id

reply_id

content ----回覆內容

time ----回覆時間

目前討論區是叫出主題資料庫的資料再作迴圈重複區域

不過想要增加新功能就是當有人回覆時

會自動跳到最上一列,也就是以回覆時間做排序

請問該如何做呢!?

Update:

SELECT T.*, (IFNULL(max(T1.time),T.time) ) AS Reply_TIME

FROM 主題資料庫 AS T

第一句條件事的部分看不太懂

可以煩請您多加說明一下嗎?!

回覆文章資料庫裡面的reply_id= 主題資料庫裡面的topic_id

您的T1.time 跟T.time是指?!

Update 2:

拍謝因為補充內容不會寄信到我的MAIL所以我現在才看到SOR

如果我的

主題資料庫是

id ---流水編號

tile ---標題

name ---發表主題者姓名

content ---發表內容

time ---發表時間

Update 3:

回覆資料庫是

id ---流水編號

rid ---抓取主題資料庫id的編號

name ---回覆人名稱

content ---內容

time ---回覆時間

Update 4:

那該怎麼套用進去呢?!

是這樣嗎

SELECT topic.*, (IFNULL(max(reply.time),topic.time) ) AS ""Reply_TIME ""→Reply_TIME這部分是指?!

FROM topic AS topic.time

LEFT JOIN reply AS topic.tome ON (topic.id = reply.rid)

WHERE {依你原來的條件判斷,欄位記得前面加上 T.}

GROUP BY topic.id

ORDER BY reply.time Desc

是這樣嗎

Update 5:

喔喔我懂你的意思了

SELECT topic.(這邊後面要加一點嗎?! topic是我主題資料庫的名稱)

*, (IFNULL(max(reply.time),topic.time) ) as reply.time

FROM `topic` AS topic.time

Update 6:

上面是說如果回覆資料庫無人回覆,回覆時間為NULL時就以主題資料庫的時間當作回覆時間嗎

不過後面加上FROM `topic` AS topic.time 又是指?!

SOR我資質比較駑鈍

Update 7:

喔喔SOGA

所以就是說

FROM `topic` As T

上面這句的意思就是指把topic 用T來表示囉

那個T1就用原來的reply不縮寫嗎?!

3 Answers

Rating
  • 1 decade ago
    Favorite Answer

    SELECT T.*, (IFNULL(max(T1.time),T.time) ) AS Reply_TIME

    FROM 主題資料庫 AS T

    LEFT JOIN 回覆資料庫 AS T1 ON (T.topic_id = T1.reply_id)

    WHERE {依你原來的條件判斷,欄位記得前面加上 T.}

    GROUP BY T.topic_id

    ORDER BY Reply_TIME Desc

    試試看能不能用吧

    2007-10-03 10:18:01 補充:

    我是根據你的欄位名稱

    T.time => 主題資料庫的發表時間

    T1.time => 回覆文章的回覆時間

    用 Left Join 找不到資料時 T1的值是空的,表示無回覆文章

    (IFNULL(max(T1.time),T.time) ) AS Reply_TIME

    max(T1.time) 最後(最大)的回覆時間

    IFNULL(A,B) 如果A不是NULL,返回A,否則B

    即找不到回覆時間則是用發表時間取別名為 Reply_TIME

    在依據Reply_TIME排序

    2007-10-03 10:26:56 補充:

    主題資料庫 AS T 將主題資料庫取別名為 T

    回覆資料庫 AS T1 將回覆資料庫取別名為 T1

    因為

    主題資料庫.topic_id 太長了

    T.topic_id 簡潔易看

    應該都補充完畢了...@@

    2007-10-05 09:18:24 補充:

    之前給你的就是套用的結果呀

    下面的SQL是將 資料表名稱改為你的名稱

    ======================================================

    SELECT T.*, (IFNULL(max(T1.time),T.time) ) AS Reply_TIME

    FROM `topic` AS T

    LEFT JOIN `reply` AS T1 ON (T.topic_id = T1.reply_id)

    WHERE {依你原來的條件判斷,欄位記得前面加上 T.}

    GROUP BY T.topic_id

    ORDER BY Reply_TIME Desc

    2007-10-05 11:19:59 補充:

    非也非也

    FROM `topic` AS topic.time => 這是錯誤的

    FROM `topic` As T //自訂一個名稱,我這兒是設 T

    代表說 將 `topic` 取另一個名稱為 T

    所以

    topic.topic_id 是相同於 T.topic_id

    由於有些資料表名稱可能很長 例如 product_category

    如果每個欄位都要打上 product_category 那會使得 SQL太長增加閱讀的困難度

    所以用別名的方式可以有效簡短SQL語法的長度

    Source(s): 自己
  • Anonymous
    7 years ago

    台灣第一家合法博弈娛樂城熱烈開幕!

    運動彩、遊戲對戰、現場百家樂、多國彩球

    高賠率投注,歡迎您免費體驗!

    網址 TS8855.NET

  • 1 decade ago

    select * from 回覆文章一個資料庫 order by time desc

Still have questions? Get your answers by asking now.