0

簡単に言えば、2つの列を持つテーブルがあります。1つはユーザー名で、もう1つはニックネームです。2つの列がある別のテーブルがあります。1つはユーザー名で、もう1つはcountNicknamesです。

countNicknamesに、各ユーザーが持っているニックネームの数を含めたい(そして、table1に新しいニックネームを挿入するたびに、table2.countNicknamesの下の値が自動的に更新されます。

最初のテーブルを参照するために2番目のテーブルを作成する方法を書き留めてください。

4

3 に答える 3

5

値が必要なときに数えないのはなぜですか?

于 2009-12-24T19:26:07.853 に答える
1

ええと、@ Lasseの提案の方が良いですが、...他に2つのオプションがあります...

  1. MySqlにはトリガーがありますか?その場合、最初のテーブルにレコードが挿入、更新、または削除されるたびに2番目のテーブルのCountNickNames属性を更新(または必要に応じて挿入または削除)する最初のテーブルにInsert、Update、Deleteトリガーを追加します。 。

    NickNameCountTableにトリガーNickNameCountTrigを作成し、Insert、Update、Delete As Update nct Set CountNickNames =(Select Count()From FirstTable Where Name = nct.Name)From NickNameCountTable nct Where Name In(Select Distinct Name from Inserted Union Select Distinct Name Fromdeleted) - - - - - - - - - - - - - - - - - - - - - - - - - 入れるNickNameCountTable(Name、CountNickNames)Select name、count()from FirstTable ft Where Not Exists(Select * From NickNameCountTable Where Name = ft.Name)----------これはオプションです--------- -------------- CountNickNames=0のNickNameCountTableを削除します

  2. MySqlにはインデックス付きのビュー(または同等のもの)がありますか?明らかにそうではありません-したがって、このオプションを気にしないでください...。

于 2009-12-24T19:47:21.400 に答える
1

countNicknamesに、各ユーザーが持っているニックネームの数を含めたい(そして、table1に新しいニックネームを挿入するたびに、table2.countNicknamesの下の値が自動的に更新されます。

これは事実上、ビューが行うことです。

CREATE OR REPLACE VIEW user_nickname_count AS
    SELECT t.username,
           COUNT(*) 'countNicknames'
      FROM TABLE t
  GROUP BY t.username

ビューはテーブルのように見えるので、必要に応じてビューに参加できます。そして、唯一のオーバーヘッドは、事実上、実行されているSELECTクエリだけであるということです。値は、トリガーを設定する必要はなく、オンデマンドで計算されます。

ビューの詳細については、ドキュメントを参照してください。

于 2009-12-24T19:48:18.887 に答える