Если rowCount пусто, попробуйте еще раз

Я выполняю запрос из таблицы, данные которой обновляются (удаляются и повторно вставляются) каждые 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);

?>

1

Решение

Используйте цикл 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);

Однако это очень плохая практика, я бы порекомендовал поискать другой подход. Зачем вам очищать, а затем пополнять стол?

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);
?>
1

$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);

это, по сути, ответ на ваш запрос, хотя для того, чтобы он был полезен, требуется более подробное объяснение.

0
По вопросам рекламы [email protected]