Каков лучший способ получать максимальную стоимость поля integer?

У таблицы есть поле идентификация integer (он не является автоувеличительным), я хочу получить последнюю стоимость это увеличивать в новых реестрах, которые будут введены в компьютер. Если у таблицы нет реестров $ valorId=0. Если у таблицы есть реестры, будь должен брать полученную стоимость select max (пойдите).

$sql = "SELECT max(id) as valorId FROM tabla";
$sth = $BD->prepare($sql);
$sth->execute();

$valor   = $sth->fetch(PDO::FETCH_ASSOC);
$valorId = $valor['valorId'];

if (is_null($valorId)){
    $valorId = 0;
}

if (is_string($valorId)){
    $valorId = intval($valorId);
}

echo $valorId;

Результат, который получается от $valorId:
Если нет реестров, тип - NULL.
Если есть реестры, тип - string.
Это функционирует. Возможно улучшаться?

0
задан 13.01.2017, 06:29
0 ответов

Не импортируя данных, которые были или не существовали в твоей таблице, консультации:

SELECT max(id) as valorId FROM tabla

... всегда он закончится точно 1 реестром.

Например, если твоя таблица будет пустой, результат будет 1 реестром со стоимостью NULL.

И если таблица да будет содержать реестры, результат будет 1 реестром с максимальной стоимостью id.

Ты можешь подтверждать это здесь: Demo.

Так что он не имеет никакого чувства, что ты проверил количество реестров, которое возвращает тебе консультацию, так как он всегда возвратит тебе 1 реестр.

Если ты хочешь, чтобы он возвратил тебе стоимость 0 если таблица пустая, ты можешь добавлять coalesce или nullif в консультацию:

SELECT coalesce(max(id), 0) as valorId FROM tabla

Другая точка, которую нужно прояснять, - то, что ты просишь в титуле твоего вопроса:

Почему select не показывает количество реестров консультации?

Если то, что ты хочешь в действительности, является количеством реестров, и не стоимостью id максимальный, тогда консультация не правильна. Он должен бы быть:

select count(*) from tabla

Очевидно, я не знаю, как определена твоя колонна id, но мне это казаться крайне неправдоподобным, что максимальная стоимость этой колонны всегда соответствовала точно количеству реестров в таблице.

1
ответ дан 03.12.2019, 17:41