当MySQL在MySQL中为空时,SELECT MAX()的返回结果是什么?

时间:2012-08-27 08:08:43

标签: php mysql select return-value max

我有一张用户付款表。我需要为每笔交易指定收据代码,所以我需要知道最后一笔交易是什么?如果以前没有收据,我想添加第一个 1000 ,其他收据必须是增量,如 1001,1002,...
为此,我写了这段代码:

$receipt = '1000';
$query_receipt = mysql_query("SELECT MAX(receipt) FROM tbl_payments");
$max = mysql_result($query_receipt,0);
if ($max != '0' || $max != '')
{
    $receipt = mysql_result($query_receipt,0) + 1;
}

当我在表中有记录时,它工作正常。但是当表为空时,它返回 1 。我怎么解决这个问题?我需要知道SELECT MAX() ...的返回值,即使表是空的。

4 个答案:

答案 0 :(得分:16)

您可以使用IFNULL作为:

来实现此目的
SELECT IFNULL(MAX(receipt), 1000) FROM tbl_payments;

答案 1 :(得分:3)

你得到一个空值:

mysql> create table noRows (id int(3));
Query OK, 0 rows affected (0.03 sec)

mysql> select max(id) from noRows;
+---------+
| max(id) |
+---------+
|    NULL |
+---------+
1 row in set (0.00 sec)

然而,你可以使用合并来获得你需要的东西:

mysql> select coalesce(max(id),1) from noRows;
+---------------------+
| coalesce(max(id),1) |
+---------------------+
|                   1 |
+---------------------+
1 row in set (0.01 sec)

编辑:如果您要查看用户已经有一个,如果没有,要插入一个新行,据我所知,单个查询无法完成,但以下情况应该有效: / p>

$receipt = 1000;
$query_receipt = mysql_query("SELECT MAX(receipt) FROM tbl_payments");
$num_rows = mysql_num_rows($query_receipt);
if($num_rows>0)
{
    // Assumes $ID to be some unique field used to identify your customer stored in field ID.
    $sql="insert into tbl_payments (ID, receipt) values ($ID, $receipt)";
    mysql_result($sql)
}
else
{
    // Do stuff here to get the receipt from the first resultset.
}

在这方面,您可能需要考虑放弃旧的已弃用mysql_*功能,转而转到PDO。它更安全,功能更多。

答案 2 :(得分:2)

我还建议使用auto_increment值,并通过insert_id确定当前的收据编号。只需执行INSERT - 查询,然后再使用例如mysqli_insert_id即可获取所插入付款的ID。

如果要以值1000开头,则可以更改自动增量列的起始值。我发现这是设置自动增量以1000开始

ALTER TABLE tbl_name AUTO_INCREMENT = 1000

答案 3 :(得分:0)

以下内容应作为插入语句。如上所述,无需使用PHP运行两个查询,您可以直接在MYSQL中执行相同的结果。

INSERT INTO tbl_payments (receipt)
VALUES 
(
(SELECT CASE WHEN MAX(p.receipt) IS NULL THEN 1000 ELSE MAX(p.receipt)+1 END AS receipt 
    FROM tbl_payments p ORDER BY p.receipt DESC LIMIT 1)
)