2012-10-16 71 views
0

对于我的刀片之一,我有以下几点:(PDO/MySQL的)MAX(FIELD)+1 - 如果空

$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

+0

IFNULL(MAX(FixedFareID)+1,1) – Pomyk

回答

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

[编辑]

正如@AndreKR提到的,它可以说是更好地使用COALESCE。它跨数据库更好兼容(在Oracle中,IFNULL被称为NVL)。此外,COALESCE允许超过2个参数,在这种情况下,它返回第一个不为空的参数。我认为COALESCE的可读性较差,可能是因为该术语对非母语英语人士(如我)不太了解,因为IFNULL很容易理解。但这对于更好的兼容性和更灵活的使用来说是一个小小的折衷。

+1

标准SQL变体是'COALESCE'。 – AndreKR

+0

@AndreKR谢谢,我更新了我的答案。 – GolezTrol

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" 
相关问题