2013-11-04 73 views
1

我的工作要求我從草圖SQL - 在這種情況下是否可以使用COUNT()?

建立一個論壇系統但是我面對關於SQL

我使用Derby數據庫問題的項目。

表結構如下。

 

TABLE ForumThread (
    TID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 , INCREMENT BY 1) Primary Key, 
    TTitle varchar(50) NOT NULL, 
    UID Integer NOT NULL, 
    CID Char(7) NOT NULL, 
    Sticky Boolean Not null, 
    Status char(1) 
) 

==========Content and reply of a thread======== 
TABLE ForumThreadContent (
    RID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 , INCREMENT BY 1) Primary Key, 
    Rcontent varchar(10000) Not Null, 
    RTime Timestamp Not Null, 
    REditTime Timestamp, 
    UID Integer NOT NULL, 
    TID Integer NOT NULL, 
    Status Char(1) 
) 


TABLE Users (
    UID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 , INCREMENT BY 1) Primary Key, 
    UName varchar(50) NOT NULL, 
    UNick varchar(50) Not Null, 
    ULoginName varchar(16) NOT NULL, 
    Upwd varchar(16) NOT NULL, 
    UPic varchar(200), 
    UType Char(1) NOT NULL 

) 

=========Foreign Key========== 
ALTER TABLE ForumThreadContent 
ADD CONSTRAINT Forum_reply_fk_thread Foreign KEY (TID) REFERENCES ForumThread(TID); 
Alter Table ForumThread 
Add Constraint forum_thread_fk_User Foreign Key (UID) References Users(UID); 

在論壇中顯示單個線程的UI設計將顯示以下信息。由於能夠顯示10個線程的每一頁

  • 主題標題(ForumThread.TTitle)
  • 主題作者(Users.UNick)
  • 在線程中的回覆數
  • 新回覆時間(ForumThreadContent RTIME)
  • 最新回答者的暱稱(Users.UNick)

我的SQL語句。

SELECT ftc.tid ,ft.TTitle, ss.uNick as "Author", s.Unick as "Last replied by" , MAX(ftc.RTIME) as "Last Reply Time", COUNT(*) AS "Posts Count" 
FROm ForumThreadContent ftc, Users s, ForumThread ft, Users ss 
WHERE ftc.UID = s.UID 
     AND ftc.TID = ft.TID 
     AND ft.UID = ss.UID 
Group by ftc.tid , ft.ttitle , s.uNick , ss.uNick 
Having MAX(ftc.RTIME) IN (SELECT MAX(ftcc1.RTime) 
         FROM ForumThreadContent ftcc1 
         WHERE ftc.TID = ftcc1.tid) 

該聲明可以正確執行。 假設有3回覆在TID 「1」,當我運行它的COUNT(*)僅計數 「2」 TID:1. 要明確:在ForumThreadContent

  • 3行具有外鍵「1」 TID的
  • 的3
  • 第一行的行具有外鍵的UID的「1」
  • 其餘有一個外鍵UID的「2」

是否有可能做一個count()函數在這種情況下是否正確?我的SQL無法獲得高於2的數字。

回答

1

這可能適合你。請檢查列名一次

SELECT t1.tid, t1.Title, t1.Author, s1.Unick as 'Last replied by', ftc1.Rtime as 'last reply time', t1.count 
FROM 
(SELECT ftc.tid, ft.Title, s.UID, s.Unick as 'Author', COUNT(*) as count FROM 
ForumThreadContent ftc, Users s, ForumThread ft 
where ftc.TID = ft.TID 
and ft.UID = s.UID 
group by ftc.tid, ft.title, s.UID) t1, Users s1, ForumThreadContent ftc1 
where ftc1.rtime = (select max(rtime) from ForumThreadContent ftc2 where ftc2.tid = t1.tid) 
and ftc1.uid = s2.uid 
相關問題