0

对于我的插入之一,我有以下内容:(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如果表是空的,我将如何设置?

4

2 回答 2

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

[编辑]

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

于 2012-10-16T11:23:24.230 回答
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"
于 2012-10-16T11:28:12.970 回答