• ベストアンサー

動的な(?)値のつくりかた

user_table --------------- user_id user_name posts --------------- entry_table --------------- entry_id user_id document このようなテーブルがあったとして、 user_tableのpostsの値を entry_tableのなかのuser_idが一致するレコードの数と同じにするには どのような方法がありますか? 文章がおかしいかもしれませんが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

一日一回といった最新の状態に反映する時間を設けるのであれば、update文で更新することが考えられます。 update user_table,entry_table set posts=(select count(*) from entry_table where user_table.user_id=entry_table.user_id) MySQL 5.0以降であれば、ビューを作成する方法も考えられます。 <ビューの定義> create view vUser_table as select user_id,user_name, (select count(*) from entry_table where user_id=x.user_id) as posts from user_table as x <ビュー経由での参照> select * from vUser_table order by user_id ビューで参照すれば、常に最新の情報を見られます。一方、ジョインやcount(*)を使っているビューのため、このビュー経由で、user_table表は更新できません。

すると、全ての回答が全文表示されます。

関連するQ&A