作者 主題: 請教對論壇文章做特定分類下的文章判斷過濾狀態SQL語法  (閱讀 2689 次)

0 會員 與 1 訪客 正在閱讀本文。

huangxianqin

  • 憂鬱的高中生
  • ***
  • 文章數: 129
    • 檢視個人資料
各位版上前輩好

小弟開發一個論壇系統,針對文章設計了三個table來儲存,分別是 article本體A、article_state文章狀態B、article_term文章分類標籤C,其中A對B是一對多,A對C是多對多。

現有個需求是,當文章刪除後,必須於特定分類下不能被取出...

首先,由A與B做Group By及Order By過濾每一篇文章最新狀態語法大約如下:

代碼: [選擇]
SELECT `ArticleId`, `status`
FROM (
SELECT *
FROM `article_state`
ORDER BY `setTime` DESC
) AS ordertable
GROUP BY `ArticleId`
HAVING (
`status` NOT
IN ( 3, 4 )
)

status為3或4代表該篇文章不該被取出。

接下來就比較不知道如何寫會比較好.....以上面的結果再取出 article_term 內的ArticleId 並判斷是否為特定的TermId,目前想到的寫法為

代碼: [選擇]
SELECT `ArticleId`
FROM article_term
WHERE AritcleId
IN ( 前述SQL語法 ) AND TermId = 1;

TermId=1,代表特定文章分類

而第二部份的結果必須要再回到本體 article 判斷產生時間取出最新一篇文章.... 故

代碼: [選擇]
SELECT aritcleId , initTime FROM article WHERE
AritcleId in (上述SQL語法) ORDER by initTime DESC limit 1

這主要是取出不同討論區下最新發佈文章,同時當該文章已「假刪除」時不列入紀錄筆數處理...但我在第二部份的SQL語法有錯,因為status欄位一併取出做HAVING.....

想請教前輩如何修改?