列是否等于另一个表的计数?

时间:2012-07-09 20:00:53

标签: mysql

有没有办法让一列等于另一个表中所有行的计数,其中id =当前行中的一列?

例如。

  • table1包含列:id,count
  • table2有列id,table1_id

我希望table1.count自动填充table2中table2.table1_id = table1.id

的行数

(它的父母有一个关系)。

显然我可以用php做到这一点,我只想到这将比每次页面加载时不断使用php重新计算这个更快。感谢。

4 个答案:

答案 0 :(得分:1)

您可以使用view完成此操作。不过,它可能每次都会重新计算数字。

要在每次更改常规表时更新常规表,请使用trigger

如果表格很少更改,请不要过于担心重新计算,因为结果通常会出现在查询缓存中。

答案 1 :(得分:0)

假设table1.id是唯一键,您可以执行以下操作:

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

答案 2 :(得分: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,并将结果显示为一个视图,在大多数情况下可以像表一样使用。

答案 3 :(得分:0)

您可以使用触发器实现此“自动”效果,当然,如果您的数据库引擎支持它们。 您需要在table_data,onInsert()和onDelete()上建立2个触发器。