2012-07-09 25 views
1

有沒有辦法讓一列等於不同表中所有行的計數,其中id =當前行中的一列?有一列等於另一個表的數量嗎?

例如。

  • 表1有列:ID,算上
  • 表2具有列ID,table1_id

我想table1.count自動填充行的表2中的量,其中table2.table1_id = table1.id

(它的父母子女有一個關係)。

很明顯,我可以用php做這個,我只是覺得這會比每次頁面加載時不斷用這個php重新計算這個速度更快。謝謝。

+1

另一個必須是一張桌子,它不能是一個視圖嗎? – roymustang86 2012-07-09 20:02:41

+0

是的,一定是桌子。 Theres more to the table比我顯示的更多 – 2012-07-09 20:03:11

回答

0

使用視圖和一張桌子table1_data,你可以這樣做:

CREATE VIEW table1 AS 
SELECT table1_data.*, COUNT(*) AS count 
FROM table1_data, table2 
WHERE table1_data.id = table2.table1_id 
GROUP BY table1_data.id 

這將需要的所有數據從table1_data開始,按照您的描述添加列count,並將結果顯示爲可在大多數情況下用作表格的視圖。

1

您可以使用view完成此操作。不過,它可能會重新計算每次的數字。

要每次更改另一個表時更新常規表,請使用trigger

不要太擔心重新計算如果表很少發生變化,因爲結果通常會在查詢緩存中。

+0

視圖能更新真實表格的單個列嗎? – 2012-07-09 20:07:54

+0

不,但觸發器可以。 – 2012-07-09 20:09:38

0

假設table1.id是一個獨特的鍵,就可以執行以下操作:

REPLACE INTO table1 (id, count) 
SELECT table1_id, COUNT(*) 
FROM table2 
GROUP BY table1_id 
+0

那麼它需要自動化,以便每當table2更新時,table1將更新計數 – 2012-07-09 20:05:53

+0

當您希望自動更新時,您希望視圖不是表格。你可以從一個靜態表和一個select來構造一個視圖來添加計數。 – MvG 2012-07-09 20:08:27

+0

問題是隻有一列是自動的,另一列沒有。 – 2012-07-09 20:09:32

0

您可以使用觸發器實現這種「自動」效果,當然如果您的數據庫引擎支持它們。 你需要在你的table_data,onInsert()和onDelete()上建立兩個觸發器。

相關問題