2016-04-26 2 views
1

Я запускаю запрос из таблицы, данные которой обновляются (удаляются и повторно вставлены) каждые 30 секунд.Если rowCount пуст, попробуйте еще раз

Я хочу, чтобы мой запрос (который выводит количество строк) обнаруживает, что количество строк равно null (или нулю) и повторное выполнение запроса. Максимальные повторные попытки: 5.

И после 5-го повторения, если он все еще равен нулю, я хочу, чтобы число строк было напечатано «0».

Я знаю, что это цикл, но я не знаю, как его закодировать из строки if.

<?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

Используйте делать во время цикла, и только оставить петлю, если 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? Ссылка - $ retry> 0); –

+0

Что относительно: while ($ count === 0 && $ retry <6); –

+0

Черточки уменьшают значение '$ retry' на один, а затем проверяют условие. – 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); 

, что является основополагающим ответом на ваш запрос, хотя для его использования требуется дополнительное объяснение.