Я выполняю запрос из таблицы, данные которой обновляются (удаляются и повторно вставляются) каждые 30 секунд.
Я хочу, чтобы мой запрос (который выводит количество строк) обнаружил, что количество строк 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);
?>
Используйте цикл do while и выходите из цикла только в том случае, если число строк превышает 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);
Однако это очень плохая практика, я бы порекомендовал поискать другой подход. Зачем вам очищать, а затем пополнять стол?
Все еще новичок в 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);
?>
$i = 0;
do {
$result = mysqli_query($con, $sql);
$count = mysqli_num_rows($result);
} while ($count == 0 && $i++ < 5)
Как я понял, вы пытаетесь написать веб-игру. На самом деле ваш метод, вероятно, сделает базу данных немного занятой. Вам не нужно зацикливать запросы. Если вы собираетесь это сделать, мы говорим о миллисекундах здесь. Допустим, ваши запросы обычно дают результаты за 0,05 секунды, что означает, что для 5 запросов вы просто будете иметь данные 0,25 секунды.
Вы можете написать свою игру или что угодно легко с помощью программирования COMET. Но если вы решили использовать циклические запросы, вы можете сделать только одну вещь — цикл.
$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);
это, по сути, ответ на ваш запрос, хотя для того, чтобы он был полезен, требуется более подробное объяснение.