简单地说:我有一个包含2列的表:一个是用户名,另一个是昵称。 我有另一个表,我有2列:一个是用户名,另一个是countNicknames。
我希望countNicknames包含每个用户拥有的昵称数量(每当我向table1插入一个新的昵称时,table2.countNicknames下的值将自动更新。
请你写下如何构建第二个表来引用第一个表吗?
答案 0 :(得分:5)
为什么不在需要值时计算?
答案 1 :(得分:1)
嗯,@ Lasse的建议更好,但是......还有另外两个另一个选项......
MySql是否有触发器?如果是,那么您将在第一个表上添加一个Insert,Update,Delete触发器,每次从第一个表插入,更新或删除记录时,第二个表的CountNickNames属性都会更新(或插入或删除)第二个表的CountNickNames属性。
在NickNameCountTable上创建触发器NickNameCountTrig 对于插入,更新,删除 如 更新nct Set CountNickNames = (从FirstTable中选择Count() 其中Name = nct.Name) 来自NickNameCountTable nct 名称的位置(选择插入的不同名称 联盟 选择已删除的不同名称) - ----------------------------------------------- 插入NickNameCountTable(Name,CountNickNames) 从FirstTable ft中选择名称,计数() 哪里不存在 (从NickNameCountTable中选择* 其中Name = ft.Name) - ------这是可选的----------------------- 删除NickNameCountTable 其中CountNickNames = 0
MySql是否有索引视图(或某些等效视图)?显然不是 - 所以不要介意这个选项....
答案 2 :(得分: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查询 - 值是按需计算的,而不是必须设置触发器。