我在数据库中有两个表(视频和 viewData)。
我正在尝试构建一个脚本,该脚本为“视频”表中的每条记录运行,并使用“视频 ID”字段为“视频”表中的特定条目执行某些操作。做某事的部分是将一些数据转储到 viewData 表中。
在调用循环之前,我是否需要将所有记录存储在一个数组中?像这样的循环示例将非常有帮助。同样,如果“视频”表中有 1000 多条记录,这种方式可能具有潜在的可扩展性,不会对服务器造成太大伤害。
谢谢,戴夫
不惜一切代价尽量避免循环。考虑基于集合的处理,这意味着在一个 SQL 命令中处理整个行集。
我不完全确定您要做什么,因为您的问题有点含糊。但是,这里有两种可能的方法来处理您使用基于集合的思维尝试做的事情。
您可以在 UPDATE 中执行 JOIN,本质上是从父表中选择并在单个 UPDATE 命令中为所有行更新子表。
UPDATE c
SET Col1=p.Col1
FROM ParentTable p
INNER JOIN ChildTable c On p.ParentID=c.ParentID
WHERE ...
您还可以基于 SELECT 插入,因此您可以从 SELECT 中返回的每一行创建一行,例如:
INSERT INTO ChildTable
(Col1, Col2, Col3, Col4)
SELECT
p.ColA, p.ColB, 'constant value', p.ColC-p.ColD
FROM ParentTable p
WHERE...
在循环中使用数据库不是一个好习惯。最好将所有表数据选择到array
一个查询中并在将来使用此数组。
您是否可以通过其他方式访问 MySQL 表?就像使用 MySQL Administrator 或其他工具一样,即使是通过命令行?
这是因为通过查询或数据库函数直接在数据库中执行此操作将花费更多的时间、资源和其他一切。
我会这样做。
但是为了清楚起见,除非您将视频本身存储在数据库表中,否则 1000 条记录不是问题。可能会有 10,000 个。
一般提示:做你需要做的事。
如果您只需要对数据进行操作,请在数据库上执行此操作。
如果您只需要检查一个表中的一个字段,请使用SELECT your_field FROM your_table
而不是SELECT * FROM your_table
.