okovalev
@okovalev

Как оптимизировать мою функцию?

5c50806e44538603407216.jpeg
function get_trank_num($mysqli, $client) {
		$sql = "SELECT * FROM `balance`
		WHERE `client` LIKE '$client'
		ORDER BY `min_left` DESC";
		
		if ($result = $mysqli->query($sql)) {
			while ($row = $result->fetch_assoc()) {
				$tel = $row['tel'];
				$busy_line = $row['busy_line'];
				$min_left = $row['min_left'];

				if($busy_line == 0 && $min_left > 500){
					return $tel;
				}
			}
			$result = $mysqli->query($sql);
			while ($row = $result->fetch_assoc()) {
				$tel = $row['tel'];
				$busy_line = $row['busy_line'];
				$min_left = $row['min_left'];

				if($busy_line == 1 && $min_left > 500){
					return $tel;
				}
			}
			$result = $mysqli->query($sql);
			while ($row = $result->fetch_assoc()) {
				$tel = $row['tel'];
				$busy_line = $row['busy_line'];
				$min_left = $row['min_left'];

				if($busy_line == 0){
					return $tel;
				}
			}
			$result = $mysqli->query($sql);
			while ($row = $result->fetch_assoc()) {
				$tel = $row['tel'];
				$busy_line = $row['busy_line'];
				$min_left = $row['min_left'];

				if($busy_line == 1){
					return $tel;
				}
			}
		$result->free();
		}

		return 0;
	}

Выглядит довольно убого. Особенно учитывая, что в последний момент я догадался, что после первого прохода в $result пусто)

Смысл в том, что по ряду параметров мы ищем самый приоритетный номер, но если его нет, то ищем более худщий критерий:
$busy_line == 0 && $min_left > 500
$busy_line == 1 && $min_left > 500
$busy_line == 0
$busy_line == 1
Если ни один из критериев не совпадает, то возращаем 0.
Как оптимизировать функцию?
  • Вопрос задан
  • 299 просмотров
Решения вопроса 1
amark
@amark
rush less, feel more
Зачем столько раз делать один и тот же запрос? Почему бы все if'ы не сделать в одном цикле?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы