我有兩個表,一個包含線程,另一個包含帖子。每個帖子都有一個父線程,所以添加一列,在另一個表中計數行
select count(*) from posts where thread=x
會給我帖子的數量,在同一個線程X。 我想在線程表中有一列,它給了我每個線程的完全相同,但我無法想象如何去做。
我有兩個表,一個包含線程,另一個包含帖子。每個帖子都有一個父線程,所以添加一列,在另一個表中計數行
select count(*) from posts where thread=x
會給我帖子的數量,在同一個線程X。 我想在線程表中有一列,它給了我每個線程的完全相同,但我無法想象如何去做。
Denormalize it,然後做一個大的更新運行:
update thread
set postcount = (select count(id) from post where threadid = thread.id);
從現在起,只要是後添加/刪除的手動更新。
不要這樣做。
這是一個不必要的去標準化的典型例子 - 在任何需要的時候查詢線程中的帖子數量應該是一件簡單的事情,但要保持線程表上的數字還需要更新線程表作爲帖子表每次有一個新的職位。
您可以添加一個列(帖子數量)並更新它在線程表中的記錄,每次在該特定線程的發佈表中添加/刪除帖子記錄時。 是的。在這種情況下,每次都會更新兩個表,但如果將來您想要獲取特定線程的帖子數,則可以查詢Thread表,從而節省查詢特定線程的Post記錄的開銷緩衝區,然後得到一個計數。因爲,
select count(*) from posts where thread=x
首先獲取該線程在緩衝區中的所有記錄,然後給出計數。在這裏多個記錄將被讀取,因爲1個線程可以有很多帖子。因此,在這種情況下,我們可以使用帖子數來更新線索表本身,以便一次只讀取一條記錄。
對不起,但我完全不同意 - 世界上的所有forumsoftware都這樣做,因爲它**會殺死**您的論壇名單,不得不針對每個活動主題,每個網頁瀏覽請求這個。這是**必須的**非規範化的典型例子。 –