我在数据库中有两个表(videos和viewData)。
我正在尝试构建一个针对“视频”表中每条记录运行的脚本,并使用“videoID”字段为“视频”表中的特定条目执行某些操作。部分会将一些数据转储到viewData表中。
在调用循环之前,我是否需要将所有记录存储在数组中?像这样的循环的一个例子将非常有用。此外,如果“视频”表中有1000多条记录,那么这种方式可能具有可扩展性,不会对服务器造成太大伤害。
谢谢, 戴夫
答案 0 :(得分:1)
尽量避免循环。思考基于集合的处理,这意味着在一个SQL命令中处理整个行集。
我不完全确定你要做什么,因为你的问题有点模糊。但是,这里有两种可能的方法可以使用基于集合的思维来处理你想要做的事情。
您可以在UPDATE中执行JOIN,实际上是从父表中选择并在单个UPDATE命令中为所有行UPDATEing子表。
UPDATE c
SET Col1=p.Col1
FROM ParentTable p
INNER JOIN ChildTable c On p.ParentID=c.ParentID
WHERE ...
您也可以基于SELECT进行INSERT,因此您可以从SELECT中返回的每一行创建一行,如:
INSERT INTO ChildTable
(Col1, Col2, Col3, Col4)
SELECT
p.ColA, p.ColB, 'constant value', p.ColC-p.ColD
FROM ParentTable p
WHERE...
答案 1 :(得分:0)
在循环中使用数据库不是一个好习惯。我可以通过一个查询将所有表数据选择到数组中,并在将来使用此数组。
答案 2 :(得分:0)
您是否可以通过其他方式访问MyQSL表?与MySQL Administrator或其他工具一样,甚至是命令行?
这是因为会有更多的时间,资源和其他东西,通过查询或数据库功能直接在数据库中保存。
我会这样做。
但为了清楚起见,除非您将视频本身存储在数据库表中,否则1000条记录不是问题。也许会是10.000。
一般提示:只做你需要做的事。
如果您只需要对数据进行操作,请在数据库上执行此操作。 如果您只需要在一个表格中选中一个字段,选择your_field FROM your_table ,而不是 SELECT * FROM your_table 。