2017-09-22 15 views
-1

これはばかげているかもしれませんが、すべての値が0に設定されている統計表で一度だけクエリを実行するのに最適なアプローチを見つけようとしています。表は一例である:PHPは一度だけクエリを実行します

Col1 - Col2 - Col3 - Col4 - Created - Modified 
0  0  0  0  Datetime- Datetime 

私の主なスクリプトの例で、私は、いくつかの条件を評価し、一致があれば、私は、クエリを構築し、最後にmysqliのの複数の問合せを実行し、いくつかのforeach文を持っている(擬似コード) :

$query = ''; 
foreach ($array as $val) { 
    if ($val == $mycondition) { 
    $query .= "UPDATE mytable SET Col1 = Col1 + 1;"; 
    } 
} 

$db = mysqliConnection(); 
$num = $db->query("SELECT * FROM my table WHERE id = '".$ID."' AND Col1 = 0 AND Col2 = 0 AND Col3 = 0 AND Col4 = 0"); 

$result = mysqli_num_rows($num); 
// if 0 it means that nothing has been modified yet so i can run the query 
if ($result > 0) { 
    $db->multi_query($query) 
} 
$db->close(); 

これは私が考えることができる最高のアプローチです。生成され、変更されたumnsしかし、私は創造の時間は、おそらくmilisecsで変更された時間の前になるので、彼らはこれのために動作しないと思う(しかし、私は最大3秒後に実行するmutiqueryを許可するリスクユーザーが誤って3秒間間違って数回ページを実行すると、間違った値が格納されます)、最初の値が更新されるとすぐに変更された列が変更され、次のクエリが失敗します。 WHERE句(ミリ秒の場合でも)。

あなたは人が最善のアプローチだと思いますか、私は正しい方向にいますか?

よろしく

+0

セッションIDにアクセスしたときではなく、セッションIDを使用することができますか?更新が選択と何をしているかは自明ではありません。おそらくあなたはそれをより良い答えのために拡大することができます。 – Khyron

+0

私はかなりクエリを分離の理由をキャッチできませんでしたか? WHERE句をSelectクエリから追加してクエリを更新しないでください。 –

+0

ああ、申し訳ありませんが同じ質問になる可能性があります、私は眠い笑感謝だった – Aramil

答えて

1

私はフラグを使用することをお勧め。何かが好きです:

$queryFlag = 0; 

if($queryFlag == 0) { 
    //Do you things here 
    $queryFlag = 1; 
} 
+0

ちょっと良いアイデア! DBに格納されているので、指定されたIDのフラグがオンかオフかをチェックし、オフの場合は更新thaksを実行します – Aramil

関連する問題