2016-04-26 70 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); 

尽管它需要一些更多的解释才能有用,但它基本上可以满足您的要求。

相关问题