最大值(字段)+1 - 如果为空



对于我的一个插入,我有以下内容:(PDO/MySQL)

$this->sql = "INSERT INTO tblfixedfare SELECT NULL, MAX(FixedFareID)+1, '1', '$fieldDay' FROM tblfixedfare UNION SELECT NULL, MAX(FixedFareID)+1, '2', '$fieldNight' FROM tblfixedfare"

如果数据库不为空,则工作正常。如果表为空,我将如何设置MAX(FixedFareID) == 1

SELECT NULL, IFNULL(MAX(FixedFareID), 0) + 1

[编辑]

正如@AndreKR提到的,使用COALESCE可以说更好。它跨数据库的兼容性更好(在Oracle IFNULL中称为NVL)。此外,COALESCE 允许 2 个以上的参数,在这种情况下,它会返回第一个不为 null 的参数。我认为 COALESCE 的可读性较差,可能是因为非英语母语人士(如我)不太了解该术语,其中 IFNULL 是不言自明的。但这只是为了更好的兼容性和更灵活的使用而做出的一个小权衡。

$this->sql = "INSERT INTO tblfixedfare SELECT NULL, IFNULL(MAX(FixedFareID),1)+1, '1', '$fieldDay' FROM tblfixedfare UNION SELECT NULL, IFNULL(MAX(FixedFareID),1)+1, '2', '$fieldNight' FROM tblfixedfare"

最新更新