各位版上前輩好
小弟開發一個論壇系統,針對文章設計了三個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.....
想請教前輩如何修改?