我在这里使用Ci-教义...
我有 3 张表,分别名为exchange_rate
、exchangerate_batch
和agents
。
exchange_rate
和exchangerate_batch
有很多对一的关系,"代理人"与exchangerate_batch
有多对一的关系。
在更新表exchange_rate时,不同国家的更新汇率与旧汇率一起作为新汇率添加,并创建一个新exchangerate_batch并与汇率挂钩。
代理表由同一表上的主代理和子代理组成,它们作为一对多相关,但在同一表中。
我在插入和生成新的批处理 ID 时没有任何问题。当我必须在代理表上的每个代理和子代理上更新exchangerate_batch表的新创建 id 时,真正的问题就开始了。不同代理的汇率不同。我需要搜索特定代理的所有子代理并更新exchangerate_batch id。
一种解决方案是运行汇率和批处理的插入,并在后台运行代理更新时重定向到同一页面,这样用户就不必等待该过程继续。
我们怎么能做到这一点。我听说shell_exec可以做到,但不确定如何使用它。关于PHP的任何想法如何使用后台进程,以便我可以在后台更新代理表。
很抱歉给您带来麻烦,
在单独的 php 文件(或任何其他应用程序)中编写 Update命令
使用 Shell 在 PHP 案例中执行:
shell_exec('<pathto>php.exe -f <pathto>script.php');
另一方面,有一个很好的扩展"PThreads"。您可以使用它启动后台进程,然后可以同步。
http://www.php.net/manual/en/book.pthreads.php
class BackgroundSql extends Thread {
private $_sql;
public $result;
public function __construct($sql){
$this->_sql = $sql;
}
public function run() {
//Execute your Query with your Db Class and Save Result
$this->result = $Db::Query($this->_sql);
}
}
$updateCommand = new BackgroundSql('Update ... SET ... = ...');
if ($updateCommand->start()) {
/* do some work */
sleep(10);
/* ensure we have data */
$updateCommand->join();
var_dump($updateCommand->result);
}
编辑:更具体