是否可以启动两个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
?我考虑的另一种方法是制作a
和b
全局变量,并将它们初始设置为null
。然后,代替函数one
和two
返回任何值,他们只需在a
和b
完成时设置值。然后我不断检查a
和b
是否为空,如果为真,则调用函数three
。
关于这个主题的搜索我读到了pcntl
,但我不清楚这是否是执行此类型计算的最佳方式。pcntl
未安装在我的虚拟主机服务(WebFaction)上,默认情况下。
另一种方法可能是使用pg_send_query_params(),这使我能够使用不同的参数执行相同的查询,这可能比我原来的方法更快。
答案 0 :(得分:1)
是的,您可以使用Threads
同时运行两个查询。
但如果您不知道如何正确处理它们,我建议不要使用Thread
,因为它可能导致RACE
条件。
我的建议是直接调用两个函数并将它们存储在变量中并将其传递给第三个函数。它不会影响您的网页效果。
答案 1 :(得分:1)
如果您创建两个不同的连接,则可以使用异步查询。
有关详细信息,请参阅PHP手册中的pg_send_query(),pg_get_result()和pg_cancel_query()。
请注意,每个后端都是单线程的,因此每个查询必须有一个连接。
答案 2 :(得分:1)
线程很可能就是答案......
答案 3 :(得分:0)
我不太确定这是否可以纯粹使用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个不同的网页。
答案 4 :(得分:0)
在函数中创建 query1 和 query2 ,将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;
}