2016-08-03 97 views
-1

我有一个数据库有多个表(大约100),记录基于类别存储。每个类别都是一个表格,每个表格都包含多个项目。每个项目每天都有多个交易记录,无论何时发生每行有多个字段的交易。For循环中的MySQL顺序读取

我需要根据条件为每个项目获取记录,并在应用程序(PHP或Python程序)中执行一些操作(例如:某种类型的聚合)。结果再次存储在另一个数据库表中。

目前我正在为每个项目手动运行操作。通过传递项目作为参数来执行每个项目的程序。但是我对每天都在获得新类别和新项目的情况都非常反感,这让我很难调整手动执行。

下面是我试图自动化的方法,但都没有工作。

  1. 运行MySQL查询在for循环中的每个项目,但执行不工作或执行上只有一个项目。 这是我用于为每个项目提取数据的控制器,但这不会请求所有项目。它只能用于第一件商品或最后一件商品。 此外,我不能让循环等待,直到数据库拉动完成。

for($i=0;$i<$total_items;$i++) { $data['results'] = $this->scripts_model-> run_daily_stats($item, $Parameter1, $Paramet2); //Use the Results in some operations, and then proceed with next result set. }

  • 创建为每个项目平面文件并拉出的记录。这已经成为现存的一些工作,但基于条件从平面文件中提取记录似乎也同样困难。并重新创建每个文件不起作用。
  • 将所有项目放入批处理作业中,每30秒添加一行执行一次,但需要很长时间才能完成所有项目,并且我需要每天更新批处理文件。
  • 这是我使用的示例批处理文件。这有320行现在运行约2小时。我每天添加多行。所以预计这会增加总执行时间。

    15 12 * * * wget 127.0.0.1/~home/scripts/update_daily/item1 >/dev/null 2>&1 
    15 12 * * * sleep 30; wget 127.0.0.1/~home/scripts/update_daily/item2 >/dev/null 2>&1 
    16 12 * * * wget 127.0.0.1/~home/scripts/update_daily/item3 >/dev/null 2>&1 
    16 12 * * * sleep 30; wget 127.0.0.1/~home/scripts/update_daily/item4 >/dev/null 2>&1 
    
    . 
    . 
    55 12 * * * wget 127.0.0.1/~home/scripts/update_daily/item234 >/dev/null 2>&1 
    . 
    . 
    . 
    
    4. Group multiple Items and put in a batch file, but the unable to run the program for each item. 
    

    有没有一种方法可以在不破坏MySQL连接的情况下自动执行?请提出任何有助于我解决问题的技术或程序。

    感谢

    拉维

    +0

    请向我们介绍一下您试过的东西! –

    回答

    0

    即使考虑这个问题之前,我想请您务必数据库的重新审视结构。如果您有100个具有相同结构(?)的表,每个表代表一个不同的类别,那么使用一个附加的category列可以用来查询相关行,这将更加简单。

    由于您没有显示您描述的代码,所以任何人都难以说出您可能做错了什么,因为我们所知道的是,您尝试过的东西“不起作用”。

    +0

    谢谢holdenweb。我同意,将所有行放在一个表中,但我也使用逐项读取表来提高读取性能。从一张拥有100万条记录的表中拉出少量记录(每次读取大约200条记录)效率不高。 –

    +0

    你的无经验似乎是在错误地指导你。在正确设计的数据库中读取性能显然会更好。除非你有证据证明,否则你错在试图优化一些你不知道导致问题的东西。 – holdenweb

    +0

    可能你是对的。但是对于单个表上的多个项目的多次读取和多次写入对我来说似乎是一个糟糕的主意。所以继续创建多个表。如果没有其他解决方案可用,我将尝试为我的聚合操作创建一个大表,并且所有读取将在单独的表上。 –