2016-04-26 95 views
1

我正在從其數據每30秒刷新一次(刪除並重新插入)的表中運行查詢。如果rowCount爲空,請再試一次

我希望我的查詢(輸出行數)檢測行計數是null(或零)並重新運行查詢。最大重試次數:5.

第5次重試後,如果仍然爲零,我希望行數打印爲「0」。

我知道這是一個循環,但我不知道如何循環它在if for行內。

<?php 

$con=mysqli_connect("HOST","USERNAME","PASS","TABLENAME"); 


$sql="SELECT id FROM candyshop WHERE candy <= 5 AND sugartype ='hard'"; 

$number = 0; //init count for loop 

if ($result=mysqli_query($con,$sql)) 
{ 

    $rowcount=mysqli_num_rows($result); 

    printf($rowcount); //print number of rows 

    mysqli_free_result($result); 

    $number = $number+1; //increment number for loop 

} 

mysqli_close($con); 

?> 
+0

你想要的東西是ajax,請參閱這裏的文檔http://api.jquery.com/jquery.ajax/ –

+2

如果連續激發5次查詢,值不太可能發生改變。你能解釋爲什麼你認爲這是必要的嗎?更好的解決方案是在刪除並插入數據時使用事務。然後桌子永遠不會空着。 –

回答

1

使用do while循環,只有在rowcount高於0或5次重試時才離開循環。

<?php 

    $sql = "SELECT id FROM candyshop WHERE candy <= 5 AND sugartype ='hard'"; 
    $count = 0; 
    $retry = 5; 

    do { 

     // Count the rows 
     if ($result = mysqli_query($con, $sql)) { 
      $count = mysqli_num_rows($result); 
     } 

     // Wait for 10ms 
     if ($count === 0) { 
      usleep(10000) 
     } 

    } while ($count === 0 && --$retry > 0); 

    mysqli_close($con); 

然而,這是非常糟糕的做法,我會建議尋找另一種方法。你爲什麼要清理並重新填充桌子?

+0

爲什麼在$ retry之前有2個破折號?參考。 - $ retry> 0); –

+0

那麼:while($ count === 0 && $ retry <6); –

+0

破折號將'$ retry'的值減1,然後檢查條件。 – Jerodev

1

StackOverflow還是新的,但你可以試試嗎?

<?php 
$con=mysqli_connect("HOST","USERNAME","PASS","TABLENAME"); 
$sql="SELECT id FROM candyshop WHERE candy <= 5 AND sugartype ='hard'"; 
$number = 0; //init count for loop 
if ($result=mysqli_query($con,$sql)) { 
    $rowcount=mysqli_num_rows($result); 
    printf($rowcount); //print number of rows 
    mysqli_free_result($result); 
    $number = $number+1; //increment number for loop 
    if ($number = 5) { 
     printf(0); 
     break 2; 
    } 
} 
mysqli_close($con); 
?> 
0
$i = 0; 
do { 
    $result = mysqli_query($con, $sql); 
    $count = mysqli_num_rows($result); 
} while ($count == 0 && $i++ < 5) 
0

據我所知,你正在試圖編寫一個基於網絡的遊戲。其實你的方法可能會使數據庫有點忙。您不必循環查詢。如果你打算這樣做,我們在這裏談論毫秒。假設您的查詢通常在0.05秒內給出結果,這意味着對於5個查詢,您將只擁有0.25秒的數據。

您可以使用COMET編程輕鬆編寫您的遊戲或任何其他內容。但是,如果你決定使用循環查詢,那麼你只會做一件事,而且它是循環的。

0
$rowcount=0; 
do { 
if ($result=mysqli_query($con,$sql)) { 
    $rowcount=mysqli_num_rows($result); 

    printf($rowcount); //print number of rows 
    mysqli_free_result($result); 

} 
} while(++$number<5 && $rowcount!=0); 

儘管它需要一些更多的解釋纔能有用,但它基本上可以滿足您的要求。

相關問題