2

2 つの SQL クエリを開始して同時に実行することはできますか?

PHP ファイルで、Postgresqlデータベースに対して 2 つのクエリを実行しています。最初の 2 つのクエリから返された値を使用して、3 番目のクエリを実行します。

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;
}

関数onetwo同時に実行することは可能ですか? 私が検討したもう 1 つのアプローチはabグローバル変数を作成し、最初にそれらを に設定することでしたnullone次に、関数と値を返す代わりに、完了時にとtwoの値を設定するだけです。次に、とが null でないかどうかを常に確認し、これが true の場合は function を呼び出します。ababthree

私が読んだこのトピックを検索していますpcntlが、これがこのタイプの計算を実行する最良の方法であるかどうかは不明です。pcntlデフォルトでは、私のウェブホスティングサービス(WebFaction)にはインストールされていません。

別のアプローチは、pg_send_query_params()を使用することです。これにより、異なるパラメーターを使用して同じクエリを実行できます。これは、おそらく元のアプローチよりも高速です。

4

5 に答える 5

1

スレッドはおそらく答えです...

http://uk3.php.net/Thread

于 2012-10-14T18:07:42.817 に答える
1

2 つの異なる接続を作成すると、非同期クエリを使用できます。

詳細については、PHP マニュアルの pg_send_query()、pg_get_result()、および pg_cancel_query() を参照してください。

各バックエンドはシングル スレッドであるため、クエリごとに 1 つの接続が必要であることに注意してください。

于 2012-10-13T12:29:44.000 に答える
1

はい、を使用して 2 つのクエリを同時に実行できますThreads

ただし、体調不良のThread原因となりますので、取り扱いを知らない方は使用しないことをお勧めしRACEます。

私のアドバイスは、2 つの関数を直接呼び出して変数に格納し、それを 3 番目の関数に渡すことです。ページのパフォーマンスには影響しません。

于 2012-10-13T04:55:35.603 に答える
0

関数でquery1とquery2を作成し、query1とquery2の結果を別の変数に保存し、それらの変数を3番目のクエリがある関数に渡し、必要なアクションを実行します

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

$result を 2 番目の関数に渡す

 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 つの異なる Web ページを開くようなものです。

于 2012-10-13T05:10:51.890 に答える