1

1 つの列を、id = 現在の行の列である別のテーブルのすべての行の数と等しくする方法はありますか?

例えば。

  • table1 には列があります: id、count
  • table2 には列 id、table1_id があります

table1.count に table2 の行数が自動的に入力されるようにします。table2.table1_id = table1.id

(その親子には1つの関係があります)。

明らかに、私はphpでこれを行うことができます。ページが読み込まれるたびにphpを使用してこれを常に再カウントするよりも高速であると考えました。ありがとう。

4

4 に答える 4

1

ビューでこれを実現できます。ただし、おそらく毎回数を再計算します。

別のテーブルが変更されるたびに通常のテーブルを更新するには、トリガーを使用します。

テーブルがめったに変更されない場合は、再計算についてあまり心配する必要はありません。結果は通常、クエリ キャッシュにあるためです。

于 2012-07-09T20:03:59.853 に答える
0

が一意のキーであると仮定するtable1.idと、次のことができます。

REPLACE INTO table1 (id, count)
SELECT table1_id, COUNT(*)
FROM table2
GROUP BY table1_id
于 2012-07-09T20:04:42.983 に答える
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され、ほとんどの状況でテーブルと同じように使用できるビューとして結果が表示されます。

于 2012-07-09T20:10:55.397 に答える
0

もちろん、DBエンジンがトリガーをサポートしている場合は、トリガーを使用してこの「自動」効果を実現できます。table_data、onInsert() および onDelete() に 2 つのトリガーを設定する必要があります。

于 2012-07-09T20:25:39.810 に答える