【问题标题】:php do something for every record in the databasephp 为数据库中的每条记录做一些事情
【发布时间】:2011-04-30 09:26:26
【问题描述】:

我在数据库中有两个表(videos 和 viewData)。

我正在尝试构建一个脚本,该脚本为“视频”表中的每条记录运行,并使用“视频 ID”字段为“视频”表中的特定条目执行某些操作。做某事的部分是将一些数据转储到 viewData 表中。

在调用循环之前我需要将所有记录存储在一个数组中吗?像这样的循环示例将非常有帮助。此外,如果“视频”表中有 1000 多条记录,这种方式可能具有潜在的可扩展性,不会对服务器造成太大影响。

谢谢, 戴夫

【问题讨论】:

  • 您能更具体地说明您要完成的工作吗?这听起来可以用 SQL 和/或存储过程来完成,为什么要涉及 PHP?

标签: php mysql database loops records


【解决方案1】:

不惜一切代价尽量避免循环。考虑基于集的处理,这意味着在一个 SQL 命令中处理整个行集。

我不完全确定您要做什么,因为您的问题有点含糊。但是,这里有两种可能的方法来处理您使用基于集合的思维尝试做的事情。

您可以在 UPDATE 中执行 JOIN,本质上是从父表中选择并在单个 UPDATE 命令中为所有行更新子表。

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... 

【讨论】:

    【解决方案2】:

    在循环中使用数据库不是一个好习惯。最好通过一次查询将所有表数据选择到array 中并在将来使用此数组。

    【讨论】:

      【解决方案3】:

      您是否可以通过其他方式访问 MySQL 表?像 MySQL Administrator 或其他工具一样,甚至通过命令行?

      这是因为通过查询或数据库函数直接在数据库中执行这些操作会花费更多的时间、资源和其他一切。

      我会这样做。

      但为了清楚起见,除非您将视频本身存储在数据库表中,否则 1000 条记录不是问题。也许会有 10,000 个。

      一般提示:做你需要做的事。

      如果您需要对数据进行操作,请在数据库上执行此操作。
      如果您需要检查一个表中的一个字段,请使用SELECT your_field FROM your_table 而不是SELECT * FROM your_table

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-18
        • 1970-01-01
        • 2015-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多