2017-09-22 84 views
-1

這聽起來可能很傻,但我試圖找出最好的方法在那些所有的值設置爲0爲起點統計表只運行一次查詢,我想你的意見,我表是由例如:PHP運行查詢一次

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

我的主要腳本有幾個foreach循環,其中i評估一些條件,如果有比賽,我構建查詢並運行在最後一個的mysqli multiquery,通過實例(僞代碼) :

$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創建和修改,但我認爲他們不會爲此工作,因爲創建時間將始終在修改時間之前,可能以毫秒爲單位(但我不想冒險採取路徑允許最多3秒左右運行多次查詢,如果用戶在3秒內錯誤地運行頁面幾次,將會存儲錯誤的值),並且修改後的列將在第一個值更新後立即改變,使得下一個查詢失敗,如果我依靠該列作爲條件WHERE子句(即使只是milisec)。

你覺得你們是最好的辦法還是我在正確的道路?

最好的問候

+0

也許你可以着眼於使用SessionId進行查詢而不是在何時訪問它?更新與選擇有什麼關係並不明顯。也許你可以擴展,以獲得更好的答案。 – Khyron

+0

我無法理解分隔查詢的原因嗎?不會將Select查詢中的WHERE子句附加到更新查詢工作上嗎? –

+0

哦,是的抱歉,它可能是在同一個查詢,我困了哈哈,謝謝 – Aramil

回答

1

我會建議使用一個標誌。類似於:

$queryFlag = 0; 

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

嘿好主意!但存儲在數據庫中,所以我可以檢查標誌是否打開或關閉給定的ID,如果是關閉然後運行更新泰語 – Aramil