2

是否可以启动两个 sql 查询以便它们同时运行?

在一个 php 文件中,我正在对Postgresql数据库执行两个查询。使用前两个查询返回的值,我执行第三个查询。

function one(){ 
   $query = pg_query($con, $sql);                               
   $a = pg_fetch_result($query, 0, 0);  
   return $a;
}
function two(){        
   $query = pg_query($con, $sql);                            
   $b = pg_fetch_result($query, 0, 0);  
   return $b;
}

function three($a, $b){ 
   //$a + $b used to construct query $sql
   $query = pg_query($con, $sql);                               
   $c = pg_fetch_result($query, 0, 0); 
   return $c;
}

是否可以同时运行one功能two?我考虑的另一种方法是制作ab全局变量,并最初将它们设置为null. 然后,它们不是函数onetwo返回任何值,而是设置它们的值ab完成时间。a然后我不断检查是否b为空,如果为空,则调用 function three

搜索我读到的这个主题,pcntl但我不清楚这是否是执行此类计算的最佳方式。pcntl默认情况下,未安装在我的虚拟主机服务 (WebFaction) 上。

另一种方法可能是使用pg_send_query_params(),它使我能够使用不同的参数执行相同的查询,这可能比我原来的方法更快。

4

5 回答 5

1

Threads are more than likely the answer ...

http://uk3.php.net/Thread

于 2012-10-14T18:07:42.817 回答
1

如果您创建两个不同的连接,您可以使用异步查询。

有关更多信息,请参阅 PHP 手册中的 pg_send_query()、pg_get_result() 和 pg_cancel_query()。

请注意,每个后端都是单线程的,因此每个查询必须有一个连接。

于 2012-10-13T12:29:44.000 回答
1

是的,您可以使用同时运行两个查询Threads

Thread但如果您不知道如何正确处理它们,我建议不要使用,因为它会导致RACE状况。

我的建议是直接调用两个函数并将它们存储在变量中并将其传递给第三个函数。它不会影响您的页面性能。

于 2012-10-13T04:55:35.603 回答
0

在函数中创建query1query2,将 query1 和 query2 的结果存储在单独的变量中,并将这些变量传递给第三个查询所在的函数并执行必要的操作

function one()
{
  $query1="Your query here";
  $query2="Your second query here";
  $result=array_mergre($query1,$query2);
  return $result;
 }

将 $result 传递给第二个函数

 function two($result)
  {

    //Your actio ngoes here;
      }
于 2012-10-13T05:11:46.210 回答
-1

我不太确定这是否可以通过纯粹使用 PHP 来执行。

我将使用javascript来产生这样的效果。假设我有 a.php 和 b.php。我将制作一个html文件:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
   $.ajax({url:'a.php'});
   $.ajax({url:'b.php'});
</script>

这实际上不是多线程。这就像 2 个人几乎同时打开 2 个不同的网页。

于 2012-10-13T05:10:51.890 回答