MAX(FIELD)+1 - 如果为null

时间:2012-10-16 11:20:45

标签: php mysql pdo

对于我的一个插入,我有以下内容:(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

2 个答案:

答案 0 :(得分:2)

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

[编辑]

正如@AndreKR所提到的,使用COALESCE可能更好。它与数据库的兼容性更好(在Oracle IFNULL中称为NVL)。此外,COALESCE允许超过2个参数,在这种情况下,它返回第一个非空的参数。我认为COALESCE的可读性较差,可能是因为非本地英语人士(比如我)对该术语的了解较少,其中IFNULL是不言自明的。但这是一个小的权衡,以获得更好的兼容性和更灵活的使用。

答案 1 :(得分:0)

$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"